【发布时间】:2017-02-09 16:00:22
【问题描述】:
我试图弄清楚以下方法是如何被类型擦除的
public class Util {
public static <T extends Number> int sum(List<T>list){
int sum=0;
for(Number n:list){
sum+=n.intValue();
}
return sum;
}
}
我读到类型参数被替换为它的第一个边界。 所以我尝试了,但得到了一个错误:
public static int sum3(List list){
int sum=0;
for(Number n:list){ <- Type mismatch: cannot convert from element type Object to Number
sum+=n.intValue();
}
return sum;
}
【问题讨论】:
-
@Tunaki 那个骗子根本没有回答 OP 的问题。
-
@Andy 在 for-each 循环中使用原始列表不是同样的问题吗?在链接的问题中,他们有
for (String s : perms) {,其中perms是List,这也是OP 在这里的内容。 -
@Tunaki 但 OP 专门询问“如何删除以下方法的类型”。骗子基本上说“不要使用原始类型”——这当然是个好建议——但没有提供 OP 显然想知道的内容。
-
@Tunaki 对两者都没有 - 第一个只是关于方法签名(OP 也在询问方法主体);第二个是简单地询问为什么原始集合作为对象迭代(这与您之前的欺骗基本相同)。我认为 OP 正在询问如何为他的方法编写等效的类型擦除代码 - 请参阅我的答案。