java - 涉及通配符的赋值的实际应用是什么?

标签 java generics variable-assignment covariance upcasting

这样的任务的原因是什么?

List<? extends Fruit> flist = new ArrayList<Apple>();
// flist.add(new Apple()); 
// flist.add(new Fruit()); 
// flist.add(new Object());

一旦我们将 Apple 容器“向上转换”到 Fruit 容器中,我们就无法在其中添加任何内容。

我知道我们可以做这样的事情:

List<Apple> basket = new ArrayList<Apple>();
//Fill the basket with tons of juicy apples
List<? extends Fruit> fruitContainer = basket;

然后我们就可以使用 Fruit接口(interface)来使用 fruitContainer 保存的元素。但是,如果我们以后无法添加任何内容,那么这样做的实际原因是什么?

List<? extends Fruit> flist = new ArrayList<Apple>();

最佳答案

整条线可能没有实际用途,但正如您在问题中所指出的,它的每个部分( List<? extends Fruit> flistnew ArrayList<Apple>() )分别具有实际用途。它们既有效又有用,只是不能组合使用(除非您不需要在列表中添加任何内容)。这就是它编译的原因,每个部分都是有效的;这取决于我们程序员如何以合理且有用的方式将它们组合起来。

关于java - 涉及通配符的赋值的实际应用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38458520/

相关文章:

Java,通过arraylist调用对象方法

java - 自动递增数组java

c# - MVC View 脚手架不适用于通用基类?

entity-framework - Entity Framework : Assign entity to property of another entity

c - 部分初始化 C 结构

java - 添加依赖项和库 .jar 后无法解析 json import Intellij

java - Appengine 有权更改 Joda 时间默认时区

c# - 使用 LINQ 的列表集合的笛卡尔积的两种方法

Scala:从 ClassTag 中检索类名

python - 为什么它会在调用形状函数中调出局部变量 'size'?