为什么这个带有有界通配符的Java通用代码不';不编译?
当我阅读这个我不理解的源代码示例时,我正在阅读:为什么这个带有有界通配符的Java通用代码不';不编译?,java,generics,type-parameter,bounded-wildcard,Java,Generics,Type Parameter,Bounded Wildcard,当我阅读这个我不理解的源代码示例时,我正在阅读: import java.util.List; import java.util.ArrayList; import java.lang.Number; import java.lang.String; import java.lang.Long; class X<T extends List<? extends Number>> { public void someMethod(T t) { t.
import java.util.List;
import java.util.ArrayList;
import java.lang.Number;
import java.lang.String;
import java.lang.Long;
class X<T extends List<? extends Number>> {
public void someMethod(T t) {
t.add(new Long(0L)); // error
Number n = t.remove(0);
}
}
import java.util.List;
导入java.util.ArrayList;
导入java.lang.Number;
导入java.lang.String;
导入java.lang.Long;
类X假设有人以这种方式使用您的类:
List<Double> list = new ArrayList<>();
X<List<Double>> x = new X<>();
x.someMethod(list);
List List=new ArrayList();
X=新的X();
x、 方法(列表);
现在,您的方法将尝试向列表中添加Long
。这就是为什么编译器不允许它
您不能将Long
添加到列表您的方法也接受List
。如果编译器允许您在其中放置Long,可以吗?这里您添加的是一个小数字,但如果您尝试添加大于max int的数字会怎么样?@shmosel这是一个很好的答案,请阅读。也许还可以向OP解释一下使用可以做什么?扩展编号
列表?这也是他的问题的一部分。而且X
没有在问题的上下文中添加任何有用的内容。您可以只声明someMethod(List t)
而不使用泛型类,而不必这样做。