Java泛型类型:什么是两者之间的区别
(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;
}
}
当我尝试将整数(甚至是数字对象)添加到sumOfList2中时,会出现错误。请解释这里有什么问题?
T
时,我猜它会给你一个类型安全
警告。 - Georgian