这样的任务的原因是什么?
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> flist
和 new ArrayList<Apple>()
)分别具有实际用途。它们既有效又有用,只是不能组合使用(除非您不需要在列表中添加任何内容)。这就是它编译的原因,每个部分都是有效的;这取决于我们程序员如何以合理且有用的方式将它们组合起来。
关于java - 涉及通配符的赋值的实际应用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38458520/