如在本一般性問題的一個實際的例子,我想實現在Set
接口containsAll
法接口實現與方法參數超
public boolean containsAll(Iterable<?> c) { /* ... */ }
我想這應該是允許的,因爲Collection
是Iterable
這意味着這樣的containsAll
將覆蓋接口要求。同樣,更一般地說,能夠與參數超類實現接口似乎應該可以工作。但是,Eclipse說沒辦法(沒有嘗試過直接使用javac) - 有人可以解釋這個原因嗎?我確信規範中有一些東西可以讓它成爲現實,但我也想了解需求的動機。或者我錯過了Iterable<?>
不是Collection<?>
的超類嗎?
作爲一個側面的問題 - 由於我聲明瞭兩種方法,Iterable
簽名的方法總是首選的調用Collection
參數?
Eclipse的錯誤:
如果我刪除與Collection
簽名的方法,只留下Iterable
(請參閱錯誤之後),我得到如下:
The type BitPowerSet must implement the inherited abstract method Set<Long>.containsAll(Collection<?>)
確切的實施之中:
@Override public boolean containsAll(Collection<?> c) {
for (Object o : c) if (!contains(o)) return false;
return true;
}
public boolean containsAll(Iterable<?> c) {
for (Object o : c) if (!contains(o)) return false;
return true;
}
你可以發佈Eclipse給你的錯誤嗎?在IDEA中爲我工作。 – 2010-10-16 16:11:07
@Nikita:編輯。soooo ...它可能只是一個Eclipse的東西? – Carl 2010-10-16 16:15:25
這是一個術語噩夢。我逃避了這些挑戰。 – skaffman 2010-10-16 16:27:03