Java 泛型通配符有界类型与泛型有界类型参数
在了解Java泛型的过程中,我遇到了以下问题:Java 泛型通配符有界类型与泛型有界类型参数,java,oop,generics,bounded-wildcard,bounded-types,Java,Oop,Generics,Bounded Wildcard,Bounded Types,在了解Java泛型的过程中,我遇到了以下问题: public static <T extends Number> int sumListElems(List<T> list){ int total = 0; for(Number n: list) total += n.intValue(); return total; } publicstaticintsumlistelems(列表){ int-total=0; 用于(编号n:列表) 总
public static <T extends Number> int sumListElems(List<T> list){
int total = 0;
for(Number n: list)
total += n.intValue();
return total;
}
publicstaticintsumlistelems(列表){
int-total=0;
用于(编号n:列表)
总计+=n.intValue();
返回总数;
}
假设我使用以下方法添加列表的元素,仅限于包含数字的列表
但这段代码和这段代码有什么区别:
public static int sumListElems(List<? extends Number> list){
int total = 0;
for(Number n: list)
total += n.intValue();
return total;
}
public static int sumListElems(List在这种情况下没有区别。对于更复杂的签名,您可能需要重用定义的类型,因此需要对其进行定义。例如:
public static <T extends Number> void foo(T bar, List<T> myList)...
publicstaticvoidfoo(T栏,列表myList)。。。
这不仅保证了bar
和myList
的元素都扩展了Number,而且它们的类型是相同的。您不能用其他语法强制执行这一点。在这种情况下,它们是等效的。