문제

다음 코드 스 니펫

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을 사용하여 괜찮은 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top