在泛型中使用extends关键字

Moh*_*dil 4 java generics

我正在尝试这个 -

List<? extends Integer> l = new ArrayList<Integer>();
l.add(10);
Run Code Online (Sandbox Code Playgroud)

和编译器说 -

The method add(int, capture#1-of ? extends Integer) in the type List<capture#1-of ? extends Integer> is not applicable for the arguments (int)
Run Code Online (Sandbox Code Playgroud)

为什么我无法在整数列表中添加整数,为什么编译器在第一行本身没有抱怨如果我无法添加整数?

man*_*uti 8

List<? extends Integer>表示扩展的某种未知类型的列表Integer.忘记了,当下Integerfinal,在运行时,它可能是某些亚型的列表MyImaginaryInteger,在这种情况下,你不能添加Integer10,因为这样会破坏类型安全.这就是编译器不允许您添加元素的原因.

另一方面,List<? super Integer>表示一个父类的某种未知类型的列表Integer.在这种情况下,添加Integer值10是正确的,因为无论该类型在运行时Integer是什么类型,都是它的子类型.

在您的具体情况下,根本没有这个通配符 - 只需将其声明为List<Integer>.

  • 不,因为它可能是`List <MyOtherImaginaryInteger>`. (3认同)