Наследовать метод с несвязанными типами возврата - PullRequest
4 голосов
/ 14 марта 2012

У меня есть следующий фрагмент кода

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.

Как этого избежать?

Ответы [ 4 ]

2 голосов
/ 14 марта 2012

Как обсуждено в Java - коллизия имени метода в реализации интерфейса вы не можете сделать это.

В качестве обходного пути вы можете создать класс адаптера.

1 голос
/ 24 июня 2013
1 голос
/ 16 мая 2012

Существует только один случай, в котором это сработает, что упоминается xamde , но не полностью объяснено.Он связан с ковариантными типами возвращаемых данных .

В JDK 5 ковариант возвращает, где он добавлен, и, как таковое, является допустимым случаем, который прекрасно скомпилируется и работает без проблем.

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());

Это работает, потому что String является подтипом CharSequence.

0 голосов
/ 16 мая 2012

У меня была такая же проблема, и, кажется, все хорошо, если использовать JDK 7 от Oracle.

...