为什么这个带有有界通配符的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)
而不使用泛型类,而不必这样做。