我有一个SomeClass implements InterfaceA
我有一个方法:
public void doSomething(List<SomeClass) objects);
在这个方法中,我想打电话:
public void doProcessing(List<InterfaceA) o);
我该怎么做?
尽管SomeClass
isa InterfaceA
,但以下内容无效:
public void doSomething(List<SomeClass> objects){
doProcessing(objects);
}
处理此问题的标准方法是什么?
答案 0 :(得分:4)
从
更改doSomething
的签名
public void doSomething(List<SomeClass> objects);
到
public void doSomething(List<InterfaceA> objects);
甚至更好
public void doSomething(List<? extends InterfaceA> objects);
(在这种情况下,您也应该更改doProcessing
。
这意味着您的方法都可以使用接口,只知道接口而不关心具体实现。
答案 1 :(得分:4)
以这种方式声明doProcessing()
方法
public void doProcessing(List<? extends InterfaceA> o);
答案 2 :(得分:1)
public void doSomething(List<? extends InterfaceA> objects)
应该有用。
至少阅读http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf两次。