java - 我可以用像 List< 这样的相同泛型做什么? ...>?

标签 java generics collections type-conversion covariance

我这样声明集合

 List<? extends Number> ml = new Vector<Integer>();

我尝试添加元素

无效:

ml.add(new Integer(1));

这也太

ml.add(new Object());

我很困惑。如何使用 ml

最佳答案

列表不是协变的。如果您使用? extends Number那么你只能从列表中读取,不能写入。为什么不呢?

m1.add(new Object());

为什么这不起作用应该是显而易见的。该列表应该包含 Number和一个Object不是Number .

ml.add(new Integer(1));

这个不太明显。想象一下您有 m1 的不同实例。 :

List<? extends Number> ml = new Vector<Double>();
ml.add(new Integer(1));

现在m1是 double vector 。向该列表添加整数是非法的。编译器通常不知道 ? extends Number 的具体类型是什么。是。保守地说,它不允许调用 add完全方法。您可以遍历列表并读取其中的内容,也可以从中删除项目,但不能向其中添加新项目。

或者换句话说,对于 List<E>您可以调用返回 E 的方法但你不能调用那些需要 E 的作为参数。

关于java - 我可以用像 List< 这样的相同泛型做什么? ...>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156690/

相关文章:

java - 切入点格式不正确

java - Java 中的 native 数据库支持?

c# - 属性中的类型约束

java - 类型推断如何用于方法调用?

java - 类中的类型 "place"是什么意思?

generics - 电源外壳 。使用 'Add-Type'定义的类声明通用列表

list - 如何在 Scala 的列表列表中求和/合并每个值

java - 使用 CrudRepository 进行延迟加载

java - 如何创建 dspace docker 工作空间?

java - 在 Android 中对 HashMap<String, String> 进行排序