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:列表) 总

在了解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:列表)
总计+=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,而且它们的类型是相同的。您不能用其他语法强制执行这一点。

在这种情况下,它们是等效的。