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