【问题标题】:What is the practical application of an assignment involving a wildcard?涉及通配符的分配的实际应用是什么?
【发布时间】:2016-07-19 12:24:28
【问题描述】:

这样分配的原因是什么?

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 接口 来使用 fruitContainer 持有的元素。但是,如果我们以后不能添加任何内容,那么这样做的实际理由是什么?

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

【问题讨论】:

    标签: java generics variable-assignment covariance upcasting


    【解决方案1】:

    那条线采取了整体可能没有实际用途,但正如您在问题中指出的那样,它的每个部分List&lt;? extends Fruit&gt; flistnew ArrayList&lt;Apple&gt;()) 分别有实际用途。它们既有效又有用,只是不能组合使用(除非您不需要在列表中添加任何内容)。这就是它编译的原因,每个部分都是有效的;由我们这些程序员来以合理和有用的方式组合它们。

    【讨论】:

    • 问题是:程序员为什么要这样做?你能找到任何现实的场景吗? :)
    • @acejazz:我的第一句话涵盖了这一点:我认为没有任何实际理由这样做(除非,正如我稍后所说,您实际上不需要在列表中添加任何内容) .
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 2019-04-05
    • 2013-07-06
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    相关资源
    最近更新 更多