gpt4 book ai didi

Java 泛型通配符边界无法设置

转载 作者:行者123 更新时间:2023-11-30 08:19:19 25 4
gpt4 key购买 nike

我有以下类(class)。

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 {}

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

Basket<? extends Fruit> basket = new Basket<>(); 
basket.setElement(new Apple()); // cannot set

Basket<Fruit> basket = new Basket<>(); 
basket.setElement(new Apple()); // okay!

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

最佳答案

Basket<? extends Fruit>并不意味着可以容纳任何物体的篮子,只要它是 Fruit 的子类型即可。这意味着某种未知类型的篮子T延伸Fruit 。例如,它可能是 Basket<Apple> ,一个Basket<Orange>Basket<Fruit> 。因为它可能是 Basket<Orange> ,您不能将该项目设置为 Apple .

Basket<Fruit>一篮子Fruit 。任何水果都可以。

关于Java 泛型通配符边界无法设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29178446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com