Dal*_*him 1 java generics interface
我有一个定义这样的方法的接口:
public List<IA> myMethod();
Run Code Online (Sandbox Code Playgroud)
与IA另一个界面.
在我的方法实现中,我声明:
public List<A> myMethod() { /* Do something */ }
Run Code Online (Sandbox Code Playgroud)
与A一个类实现IA.
但是,Java(或eclipse)不喜欢它并迫使我List<IA>在我的实现中myMethod.作为A工具IA,我不明白为什么会抛出错误.
所以这里是问题:
您有此错误,因为从类型安全的角度来看它是不安全的.考虑:
// Interface declaration
List<Fruit> myMethod();
// Implemented by...
public List<Banana> myMethod() {
return new ArrayList<Banana>();
}
// Called as:
List<Fruit> fruit = foo.myMethod();
fruit.add(new Apple());
Run Code Online (Sandbox Code Playgroud)
你真的希望能够添加Apple一个ArrayList<Banana>?
您可以通过将声明更改为来解决此问题
List<? extends IA> myMethod();
Run Code Online (Sandbox Code Playgroud)
这将阻止调用添加到列表(或设置值).
如果您无法更改界面,我将不得不List<IA>从您的方法返回一个,我担心.
有关更多信息,请参阅Java Generics FAQ.