错误我收到以下错误消息(降低到重要组成部分)当我编译我的班:的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