我有这个通用功能:从主返回类型通用的方法的(Java)的
public static <T extends Number> T sum(List<T> list){
Number tot = 0;
for(Number n: list){
tot = tot.doubleValue() + n.doubleValue();
}
return (T)tot;
}
召回与此代码:
public static void main(String[] args) {
ArrayList<Integer> listInt = new ArrayList<>();
listInt.add(3);
listInt.add(5);
listInt.add(6);
listInt.add(8);
System.err.println("Sum: " + Calcolatrice.sum(listInt))
}
因此,我期望(即listInt整数的ArrayList)函数和返回的值是T = Integer,在这种情况下,给我一个从Double到Integer的转换错误。 结果的类型是Double而不会引发错误。 演员(T)tot没有预期的结果。
我想这是因为Java的泛型处理立场的阶段,但有人知道更好地解释为什么是这样工作的?
[类型擦除](https://docs.oracle.com/javase/tutorial/java/generics/erasure.html)是解释这种行为的术语.... –