将子类对象列表传递给以父类列表作为参数的方法

时间:2019-06-18 21:14:19

标签: java list inheritance collections superclass

根据我的用例,我有一个类myClass实现接口myInterface。

public class MyClass implementing MyInterface{
  ...
}

我有一个以List为参数的方法。

myMethod(List<MyClass> listOfMyClass){
 ...
// want to make a call to third party API which has List<MyInterface>
thirdPartyAPI(listOfMyClass);
}

thirdPartyAPI(List<MyInterface> listOfMyInterface){
...
}

在上述情况下,我想在调用#thirdPartyAPI时使用listOfMyClass。目前,我收到了“方法myMethod(List)不适用于ThirdPartyAPI(List)参数。请告诉我是否需要更新我的设计或方法。我们将不胜感激。谢谢。

经历过Java Generics -- Assigning a list of subclass to a list of superclass,但无济于事。

1 个答案:

答案 0 :(得分:1)

如果无法更改方法签名,则可能会创建必要类型的新列表:

thirdPartyAPI(new ArrayList<MyInterface>(listOfMyClass));

如果该方法定义为采用Collection<? extends MyInterface>,则可以按原样传递列表。