Метод наследования с несвязанными типами возврата

StackOverflow https://stackoverflow.com//questions/9704219

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top