我的代码中有这三个接口:
public interface ParentInterface {
// some properties and methods
}
public interface ChildOne extends ParentInterface{
//some extra properties and methods
}
public interface ChildTwo extends ParentInterface{
//some extra properties and methods
}
我有一些函数void someFunc(List<ParentInterface>)
,它应该能够接受实现ChildOne
或ChildTwo
的实例的混合列表。但是,如果我有List<ChildOne>
怎么办?有没有比这个更好的方式来呼叫someFunc
?
List<ChildOne> coList = new HashList<ChildOne>();
//add some items to coList
List<ParentInterface> piList = new HashList<ParentInterface>(coList.size());
piList.addAll(coList);
someFunc(piList);
我是否可以像someFunc(coList)
那样拨打电话而无需创建新列表?
答案 0 :(得分:1)
正如Jon Skeet在评论中所说,我将我的功能的签名改为void someFunc(List<? extends ParentInterface>)
,这就像一个魅力!