Рассмотрим следующий код:
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 и следую примеру несовместимости в принятом ответе - i.e.
public interface C { 
  public void doSomething();
}
public interface D {
  public boolean doSomething();
}
public interface CD extends C,D { 
}
Однако в этом случае типы возврата были действительно несовместимы - тип возврата не может быть как void, так и boolean. Принимая во внимание, что в приведенном выше примере возвращаемый тип another() AB является как A, так и B, поэтому возможно реализовать оба расширенных интерфейса.
Кроме того, посмотрев JLS (8.4.8, 8.4.8.3, 8.4.8.4), я не совсем понимаю, почему мой пример выше незаконно. Может кто-нибудь объяснить это мне?
Во-вторых, существуют ли какие-либо решения/обходные пути для этого, кроме повторения контрактных требований A или B в AB?