考虑以下代码:
public interface A {
public A another();
}
public interface B {
public B another();
}
public interface AB extends A,B {
public AB another();
}
这会导致编译错误AB
:
B 型和 A 型不兼容;都定义了另一个(),但返回类型不相关
我已经看到了这个SO question,并按照接受的答案中的不兼容示例进行操作 - 即
public interface C {
public void doSomething();
}
public interface D {
public boolean doSomething();
}
public interface CD extends C,D {
}
但是,在那种情况下,返回类型是真正不兼容的——返回类型不能既是 void 又是布尔值。然而,在我上面的例子中,another()
返回类型AB
是 anA
和 a B
,所以可以实现这两个扩展接口。
此外,看过 JLS(8.4.8、8.4.8.3、8.4.8.4)后,我不太明白为什么我上面的例子是非法的。谁能给我解释一下?
A
其次,除了重复或B
中的合同要求之外,是否有任何解决方案/解决方法AB
?