관련이없는 반환 유형의 Inherit 방법
-
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 가 언급 한 경우에만 하나의 경우가 있습니다. 그러나 철저하게 설명하지는 않습니다. coovariant 반환 유형 .
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());
.
문자열은 CharSequence의 하위 유형이기 때문에 이것은 작동합니다.
나는 똑같은 문제가 있었고, Oracle에서 JDK 7을 사용하여 괜찮은 것 같습니다.
제휴하지 않습니다 StackOverflow