Метод наследования с несвязанными типами возврата
-
13-12-2019 - |
Вопрос
У меня есть следующий фрагмент кода
public class Test {
static interface I1 { I1 m(); }
static interface I2 { I2 m(); }
static interface I12 extends I1,I2 { I12 m(); }
public static void main(String [] args) throws Exception {
}
}
.
Когда я пытаюсь компилировать, я получил ошибку.
.Test.java:12: types Test.I2 and Test.I1 are incompatible; both define m(), but with unrelated return types.
Как избежать этого?
Решение
Как обсуждалось в Java - Метод Название столкновения в реализации интерфейса Вы не можете сделать это.
как обходной путь, вы можете создать класс адаптера.
Другие советы
Есть только один случай, в котором это будет работать, который упоминается от xamde , но не тщательно объясненным.Это связано с ковариантные типы возврата .
в JDK 5 Covariant возвращает, где добавлено, и, как таковое, является допустимым случаем, который будет компитенным штрафом и проходить без проблем.
public interface A {
public CharSequence asText();
}
public interface B {
public String asText();
}
public class C implements A, B {
@Override
public String asText() {
return "C";
}
}
.
Следовательно, следующее будет работать без ошибок и печати «C» на главный вывод:
A a = new C();
System.out.println(a.asText());
.
Это работает, потому что строка представляет собой подтип челлезна.
У меня была такая же проблема, и, кажется, все в порядке, используя JDK 7 из Oracle.