와 오류를 컴파일 I 수 (중요한 부분 감소) 다음과 같은 오류 메시지가 내 클래스 컴파일있을 때 : 자바 인터페이스
reference to keySet is ambiguous, both method keySet() in
java.util.SortedMap<E,capture#614 of ?> and method keySet() in
test.ImmutableMap<E,capture#614 of ?> match
return map.keySet().iterator();
^
map
ImmutableSortedMap<E, ?>
이며 불변 클래스 외모의 정의를 like :
public interface ImmutableMap<K, V>
extends Map<K, V> {
@Override
public ImmutableSet<K> keySet();
...
}
public interface ImmutableSortedMap<K, V>
extends ImmutableMap<K, V>, SortedMap<K, V> {
...
}
public interface ImmutableSet<E>
extends Set<E> {
...
}
ANT 스크립트를 사용하여 컴파일 할 때나 수동으로 컴파일 할 때 오류가 표시되지만 Eclipse에서는 그렇지 않습니다. sun 1.6.0 및 icedtea6 1.8.1으로 시도해 보았습니다.
내가 누락되었거나 컴파일을 허용하기 위해 이클립스 어딘가에 설정 될 수있는 옵션이 있습니까? 문제는, 당장은 이클립스에서 테스트를 실행할 수 있지만 이클립스 밖에서는 프로젝트를 컴파일 할 수 없다는 것입니다.
편집 : 일부 컴파일러 버전 같은 다중 상속에 문제가있는 것 같다 대답
. 해결 방법은 공통 수퍼 인터페이스를 가지고 있고 메서드를 재정의하는 다른 인터페이스를 상속 한 하위 클래스에서 메서드를 한 번 더 재정의하는 것입니다.
public interface ImmutableSortedMap<K, V>
extends ImmutableMap<K, V>, SortedMap<K, V> {
// adding this method solves the problem
@Override
public ImmutableSet<K> keySet();
}
그런데 이것은 다이아 몬 문제입니다.
메서드가 일치하면 문제가되지 않습니다. –
이름을 변경하는 대신 하위 클래스의 메서드를 다시 선언하면 문제가 해결됩니다. – Kru