gpt4 book ai didi

java - 具有泛型的消费者

转载 作者:行者123 更新时间:2023-12-02 02:12:55 25 4
gpt4 key购买 nike

尝试通过 Consumer 来理解泛型。

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

class Util{
private Collection<Apple> appleList = new ArrayList<>();

public Util(){
acceptFruit(ap -> appleList.add(ap);
}

public <T extends Fruit> void acceptFruit(Consumer<T> fruitConsumer){
//FruitService.getAllFruits();
//some validations and get fruit object
fruitConsumer.accept(fruit);
}
}

//Some other class calling Util.acceptFruit(orange -> oranges.add(orange);

我遇到编译错误:

acceptFruit(ap -> appleList.add(ap);
add (Apple) in Collection can not be applied to (Fruit)

以及:

fruit.accept(fruit);
accept (T) in Consumer cannot be applied to (Apple)

由于 Apple 正在扩展 Fruit,我不明白为什么会收到此错误?你知道我在泛型/消费者概念中缺少什么吗?

最佳答案

Apple可能是Fruit ,但是Collection<Apple>不是 Collection<Fruit> 。这是由于泛型类型的不变性所致。

忽略acceptFruit内部的编译错误(对我来说,完全不清楚你开始做什么),你最好的办法是确保你的集合包含你想要交互的父类(super class)而不是任何子类。

 private Collection<Fruit> fruitList = new ArrayList<>();

这样,您就可以在消费者中食用任何您想要的水果。

任何比这更高级的东西 - 即食用特定种类的水果 - 都比我们这里的基本泛型更高级,最好留给读者作为练习。

关于java - 具有泛型的消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49700621/

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