首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Generics通配符边界无法设置

Java Generics通配符边界无法设置
EN

Stack Overflow用户
提问于 2015-03-21 02:03:12
回答 1查看 35关注 0票数 1

我有以下课程。

代码语言:javascript
复制
public class Basket<E> {
    private E element;

    public void setElement(E x) {
        element = x;
    }

    public E getElement() {
        return element;
    }
}

class Fruit {}
class Apple extends Fruit {}
class Orange extends Fruit {} 

当我考虑以下情况时,我会感到困惑。

代码语言:javascript
复制
Basket<? extends Fruit> basket = new Basket<>(); 
basket.setElement(new Apple()); // cannot set

代码语言:javascript
复制
Basket<Fruit> basket = new Basket<>(); 
basket.setElement(new Apple()); // okay!

如果? extends Fruit意味着我可以传递至少是Fruit的东西(或者任何实现或扩展的东西),为什么不能传递Apple类型呢?如果在第二种情况下传递Apple类型,我看不出这两种情况之间有什么区别,因为AppleFruit的后代.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-21 02:08:10

Basket<? extends Fruit>并不意味着一个可以容纳任何对象的篮子,只要它是Fruit的一个子类型。它意味着一个未知类型的T扩展Fruit的篮子。例如,它可以是Basket<Apple>Basket<Orange>Basket<Fruit>。因为它可能是Basket<Orange>,所以不能将项目设置为Apple

Basket<Fruit>是一篮子Fruit。任何水果都行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29178446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档