Java Generic type:之间有什么区别
(1) List <? extends Number>
(2) List <T extends Number>
根据我的理解
(1)List <? extends Number>
是具有超类“ Number”的“未知”数据类型的只读列表。我们只能读取元素,但不能添加
(2)List <T extends Number>
具有超类“ Number”的数据类型列表。我们可以 阅读并将 元素 添加 到列表中
请参见下面的代码示例
class TestGen{
public static void main(String[] args) {
double result = 0.0;
List<Integer> intList = new ArrayList<Integer>();
intList.add(10);
intList.add(20);
intList.add(30);
result = TestGen.sumOfList1(intList);
System.out.println("Result=" + result);
result = TestGen.sumOfList2(intList);
System.out.println("Result=" + result);
}
public static double sumOfList1(List<? extends Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
public static <T extends Number> double sumOfList2(List<T> list) {
double s = 0.0;
// getting error while trying to add new element
// list<T> is not applicable for argument(Integer) : Why ?
list.add(new Integer(40));
for (Number n : list)
s += n.doubleValue();
return s;
}
}
当我尝试将Integer(甚至Number对象)添加到sumOfList2时,出现错误。请在这里说明问题是什么?
基本区别是,如果使用,T extends Number
则可以引用类型T
:
list.add((T) new Integer(40));
仿佛在使用? extends Number
那样,则 无法 引用该类型,但仍可以说:
((List<Integer>)list).add((int) s);
以下代码之间有什么区别吗? 和 如果是的话,有人能解释一下区别以及何时使用什么?
问题内容: 我以为和列表上的“ + =”基本上可以做同样的事情-扩展列表而不创建新列表。 我希望可以打印以下代码,但是 为什么我收到此错误?区别在哪里? 我在python2.7.3和python3.4.0中进行了尝试。 问题答案: 使对象有 机会 就地更改对象。但这取决于的类型,这并不意味着对象已就地更改。 这样, 仍然需要重新分配 给;要么返回或新对象返回; 确实翻译成: 由于包含作业,因此在中
问题内容: 有人可以解释这个代码吗? 输出: 问题答案: 将对象转换为列表时,它仅使用键。 但是,如果用方括号将其包围,则所有内容都将保持不变,只会使其成为s的列表,其中仅包含一项。 这是因为,当您使用循环遍历时,它也只使用了键: 但是,如果要获取键 和 值,请使用: 使用循环: 但是,当您输入时,它会为您提供: 有点误导:)
问题内容: 我是Generic的新手,我的问题是:两个函数之间有什么区别: 功能1: 功能2: 问题答案: 第一个签名说:是一个ES列表。 第二个签名说:是某种类型的实例的,但是我们不知道类型。 当我们尝试更改方法时,区别变得明显,因此它需要第二个参数,该参数应添加到方法内部的列表中: 第一个效果很好。而且你不能将第二个参数更改为可以实际编译的任何参数。 实际上,我发现了一个更好的区别说明: 一个
我从Firestore示例中复制了一段代码: 但是我得到了这个错误 这里出了什么问题?
我是一个新手,我尝试运行一个GitHub项目,但遇到了一个错误,比如类型ListDynamic不是类型ListInt的子类型。Github链接 误差线 以上代码文件 如有任何帮助,我们将不胜感激,并提前向您表示感谢。