錯誤我收到以下錯誤消息(降低到重要組成部分)當我編譯我的班:的Java編譯接口
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, ?>
類型的和一成不變的類長相的定義如:
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 and iceiceda6 1.8.1。
有沒有什麼明顯的我很想念,或者有一個選項,可以在日食設置的地方允許編譯? 問題是,現在,我可以在eclipse中運行測試,但是我無法在eclipse之外編譯項目。
編輯:答案
看來,一些編譯器版本有多重繼承這樣的問題。 解決方法是在從具有公共超級接口的其他接口繼承的子類中再次重寫該方法,並自行重寫該方法。
public interface ImmutableSortedMap<K, V>
extends ImmutableMap<K, V>, SortedMap<K, V> {
// adding this method solves the problem
@Override
public ImmutableSet<K> keySet();
}
順便說一下,這是diamon問題。
如果方法匹配,那就不是問題。 – 2010-08-11 23:13:35
而不是更改名稱,重新聲明子類中的方法解決了問題。 – Kru 2010-08-23 17:04:04