gpt4 book ai didi

java - 如何向方法传递 List 而不是 List

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:40:24 26 4
gpt4 key购买 nike

我有一些实现通用接口(interface)的对象。假设我有 Apple和其他一些Fruits实现HasSeed并返回他们的种子数。

然后我有一个服务方法,称之为FruitProcessor在这里,有一个 addAll(List<HasSeed>)类(class)。我想我可以传入一个实现 HasSeed 的对象列表。界面,就像一个苹果列表。

但我不能,编译器提示它不适用于参数。还有一件事:我无法更改 List<Apple>List<HasSeed> .但是我的 FruitProcessor 中需要一个方法,它可以获取任何对象列表,然后调用 getSeeds()不管是什么物体。

我该如何调整以下内容?

class Fruit {};
class Apple extends Fruit implements HasSeed {
@Override
int getSeeds() {
return 5; //just an example
}
}

class FruitProcessor {
static void addAll(List<HasSeed> list) {
for (HasSeed seed : list) {
Sysout("the fruit added contained seeds: " + list.getSeeds());
}
}
}

class FruitStore {
List<Apple> apples;
FruitProcessor.addAll(apples); //The method addAll(List<HasSeed>) in the type FruitProcessor is not applicable for the arguments (List<Apple>)
}

最佳答案

你必须使用 List<? extends HasSeed>

背后的原因是List<Apple>不扩展 List<HasSeed> .当你写 List<? extends HasSeed>在您的签名中,这意味着您接受任何实现 HasSeed 的元素列表界面。这就是为什么你可以通过 List<Apple>作为List<? extends HasSeed>

关于java - 如何向方法传递 List<Interface> 而不是 List<Class>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15473359/

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