Java 如何向方法传递列表<;界面>;而不是列表<;类别>;?
我有一些实现公共接口的对象。假设我有Java 如何向方法传递列表<;界面>;而不是列表<;类别>;?,java,oop,collections,interface,Java,Oop,Collections,Interface,我有一些实现公共接口的对象。假设我有苹果和其他一些水果,它们实现了HasSeed,并返回它们的种子数 然后我有了一个服务方法,在这里用一个addAll(List)类将其称为FruitProcessor。我想我可以传入一个实现HasSeed接口的对象列表,比如苹果列表 但我不能,编译器抱怨它不适用于参数。 还有一件事:我不能将列表更改为列表。但是我需要在我的水果处理器中有一个方法,它可以获取任何对象列表,然后调用getSeeds(),不管它是什么对象 我如何适应以下情况 class Fruit {
苹果
和其他一些水果
,它们实现了HasSeed
,并返回它们的种子数
然后我有了一个服务方法,在这里用一个addAll(List)
类将其称为FruitProcessor
。我想我可以传入一个实现HasSeed
接口的对象列表,比如苹果列表
但我不能,编译器抱怨它不适用于参数。
还有一件事:我不能将列表
更改为列表
。但是我需要在我的水果处理器中有一个方法,它可以获取任何对象列表,然后调用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>)
}
class水果{};
苹果类扩展了水果类{
@凌驾
int getSeeds(){
return 5;//只是一个示例
}
}
类处理器{
静态void addAll(列表){
用于(HasSeed种子:列表){
Sysout(“添加的水果包含种子:+list.getSeeds());
}
}
}
高级水果店{
列出苹果;
FrootProcessor.addAll(Apple);//类型FrootProcessor中的方法addAll(List)不适用于参数(List)
}
您必须使用列表使用静态void addAll(列表私有列表doSomething(列表arg)
?为什么它不起作用?