问题:
基础界面:
IBase
后代:
InterfaceA extends IBase<Interface1>
InterfaceB extends IBase<Interface2>
当我尝试:
InterfaceC extends InterfaceA, InterfaceB
我收到编译错误:
The interface IBase cannot be implemented more than once with different arguments
是否存在解决方法? 感谢。
答案 0 :(得分:4)
这是不可能的,至少它不能用Java。 考虑以下情况:
interface Base<K> {
K get();
}
interface A extends Base<String> {
String get();
}
interface B extends Base<Integer> {
Integer get();
}
interface AB extends A, B {
??
}
当你尝试实现AB时,如果可能的话,get()方法将返回什么类型。在Java中,类中的两个方法不能具有相同的名称/ args但返回类型不同....因此,这是禁止的。
如果您确实需要一些类似于Java所允许的功能,我建议如下:
abstract class C {
A a;
B b;
String aGet() {
return a.get();
}
Integer bGet() {
return b.get();
}
}
或者,保持泛型:
abstract class C<K, T> {
Base<K> a;
Base<T> b;
K getA() {
return a.get();
}
T getB() {
return b.get();
}
}
答案 1 :(得分:3)
泛型基本上只是编译时检查,因此InterfaceA和InterfaceB是相同的。
您建议的一般解决方法很难提出,您可能需要更多地指定您的确切情况。但是你真的需要THAT类来实现这两个,为什么不是两个不同的类?也许是嵌套类,甚至是匿名内部类?