java - 在泛型中使用 extends 关键字

标签 java generics

我正在尝试这个 -

List<? extends Integer> l = new ArrayList<Integer>();
l.add(10);

编译器说 -

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)

为什么我无法将整数添加到整数列表,如果我无法添加整数,为什么编译器不会在第一行本身提示?

最佳答案

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

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

在您的特定情况下,使用此通配符根本没有意义——只需将其声明为 List<Integer> .

关于java - 在泛型中使用 extends 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32924913/

相关文章:

java - getClass()方法的返回类型描述中的 "static type of expression"是什么意思?

java - Android Studio Java 类有一个下拉菜单

java - Spring Security OAuth2 - 如何使用 OAuth2Authentication 对象?

java - 可变参数堆污染 : what's the big deal?

c# - 使用非空构造函数初始化泛型

java - 为什么返回泛型列表的 Java Stream 不起作用

java - 对象输入流 : is this correct way to unblock

java - 使用模板文件包含 HTML 信息

java - 使用输入处理器使对象遵循触摸输入的 x 轴,对象会变得疯狂

C#:泛型、多态性和特化