Java Generic类型:List<?之间的差异extends Number>和列表< T extends Number> [英] Java Generic type : difference between List <? extends Number> and List <T extends Number>
问题描述
Java Generic类型:有什么区别
Java Generic type : what is the difference between
(1) List <? extends Number>
(2) List <T extends Number>
根据我的理解
(1 )列表<? extends Number>
是具有超类Number的
Readonly List ofunknown数据类型。我们只能读取元素但不能添加
(1) List <? extends Number>
is the
Readonly List of "unknown" data type with super class "Number". we can read the element only but can not add
(2)列表< T extends 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然后得到错误。请解释这里有什么问题?
When I am trying to add the Integer (or even Number object) into the sumOfList2 then getting the error. Please explain what is wrong here ?
推荐答案
基本区别在于你使用 T extends Number
那么你可以参考类型 T
例如: list.add((T)new Integer (40));
如果您使用?扩展数
然后你不能引用类型,但你仍然可以说((List< Integer>)列表).add((int)s);
Basic difference is if you use T extends Number
then you can refer to the type T
For example: list.add((T) new Integer(40));
Where as if you use ? extends Number
then you can't refer to the type, but you can still say ((List<Integer>)list).add((int) s);
这篇关于Java Generic类型:List<?之间的差异extends Number>和列表< T extends Number>的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!