涉及通配符的作业的实际应用是什么?

时间:2016-07-19 12:24:28

标签: 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());

一旦我们在Fruit容器中“upcast”Apple容器,我们就无法在其中添加任何内容。

我知道我们可以这样做:

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

然后我们就可以使用Fruit 接口来使用fruitContainer所拥有的元素。但是,如果我们以后不能添加任何内容,那么实际原因可以做这样的事情吗?

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

1 个答案:

答案 0 :(得分:0)

该行采用整体可能没有实际用途,但正如您在问题中指出的那样,每个部分({{ 1}}和List<? extends Fruit> flist)分别具有实际用途。它们既有效又有用,只是没有组合(除非你不需要在列表中放任何东西)。这就是编译的原因,每个部分都是有效的;程序员应该以合理有用的方式将它们组合起来。