2016-04-28 18 views
5

所以我有一門我想要能夠分類的課程。爲此,我簡單地實現了集合接口,以便它可以在Collections類中使用。是否可以在java中實現ListIterator和Collection?

現在我已經注意到,類本身只是一個跳轉,跳過和一個從ListIterator跳轉,它將很高興讓它實現該接口(展望未來)。有一個問題,雖然,那就是有Collection接口和接口的ListIterator之間的衝突的方法:

// from the Collection interface: 
public boolean add(E someElement); 

// from the ListIterator interface: 
public void add(E someElement); 

是否有可能有一類符合兩個接口?如果不是,這是否意味着這兩個接口是互斥的?

+2

我首先問自己爲什麼你覺得你需要兩個。如果集合不需要,爲什麼添加ListIterator的額外需求?除非我有功能性原因,否則我總是儘量不要使代碼複雜化。 – Kurtymckurt

+0

這將是一個列表組,我將在這份工作中使用相當多的內容,並且我可以在將來看到需要ListIterator的可能性。我創建的解決方案是創建一個返回數據的ListIterator的方法。不是最優雅的解決方案,而是一種解決方案...... –

+0

相反,擴展'AbstractList'類不是好主意嗎?你可以看看'ArrayList','LinkedList'的實現以及它們如何解決同樣的問題。 – soufrk

回答

5

是的,不幸的是,它們是互斥的。

當你創建一個試圖實現兩者的(抽象)類時,你會得到一個編譯器錯誤。

Main.java:16: error: types ListIterator and Collection are incompatible; both define add(java.lang.Object), but with unrelated return types
abstract class Foo implements Collection, ListIterator

4

你是對的,你不能實現兩者。但說實話,你爲什麼想這樣做呢?

如果您需要公開ListIterator,爲什麼不添加一個返回一個的方法?

List它擴展了Collection比如沒有擴展ListIterator,它有一個方法叫做listIterator,它返回迭代器。

ListIterator<E> listIterator(); 

請說出你,一個Collection不是Iterator,一個CollectionIterable

+1

這就是我最終做的。 :) –

0

正如其他人所說,在課堂上不可能有兩個。

ListIterator的語義,作爲一個Iterator,但禁止這樣的:一個Collection是你可以經常只要你想迭代,而一個Iterator是,一旦你遍歷它一次性的東西,可以扔掉(或者,在ListIterator的情況下,可能會倒回並重新使用,但這不是標準用例)。

相關問題