2014-03-12 86 views
0

這是我爲了實現鏈表編寫的代碼,正確的方式來覆蓋Iterables <Obj>在Java中

private class DequeIterator<Item> implements Iterable<Item> { 
    private Node pElement; 

    DequeIterator() { 
     pElement = first; 
    } 

    public boolean hasNext() { 
     return pElement != null; 
    } 

    public Item next() { 
     if (!this.hasNext()) { 
      throw new NoSuchElementException(); 
     } 
     Item ret = pElement.it; 
     pElement = pElement.next; 
     return ret; 
    } 

    public void remove() { 
     throw new UnsupportedOperationException(); 
    } 
} 

我不知道是怎麼了?我得到follwing錯誤,請幫我解決這些

=> Deque.java:25:錯誤:Deque.DequeIterator不是抽象和可迭代不重寫抽象方法迭代器()

=> Deque.java:35:錯誤:不兼容的類型 項目RET = P成分。它; ^ 需要:項目#2 實測值:項目#1

=> Deque.java:121:錯誤:不兼容的類型 返回新DequeIterator(); ^ 必需:迭代器 找到:Deque.DequeIterator

+0

您已經宣稱類'實現Iterable'然後執行'Iterator' –

回答

5

您正在實現錯誤的接口。 Iterable要求您實施您沒有提供的iterator()方法。因此,第一個錯誤。

您可能想要實施Iterator,而這需要hasNext(),next()remove()

你沒有顯示你的代碼的其餘部分,但我相信你有Deque.java具有的鏈表代碼的其餘部分(即到head等的引用),所以也許你可能希望有Deque implements Iterable<Item>iterator()方法返回DequeIterator的實例。

您還需要從DequeueIterator中刪除<Item>。你已經說它實現了Iterable<Item>,所以你限制了這個類型。您正在將其更改爲泛型類型,這是導致第二個錯誤的原因。我推測Item是在其他地方定義的具體類(尤其是因爲pElement返回它並且沒有與其關聯的泛型類型)。

第三個錯誤,不知道121行是什麼,你沒有包括它。但最有可能它對我上面提到的同樣的理由(DequeIterator需要實現Iterator沒有Iterable

+0

哦,謝謝,您的建議解決了第一和第三錯誤,請告訴我如何解決第二個錯誤? – hkbharath

+0

只需將'DequeIterator '更改爲'DequeIterator'。你正在創建一個新的泛型類型,實際上我假設你有一個名爲'Item'的普通具體類。 – jbx

0

Deque.java:25: error: Deque.DequeIterator is not abstract and does not override abstract method iterator() in Iterable

Iterable類存在方法iterator(),這是抽象的。您有責任實施每種抽象方法。

0

您必須重寫您的類DequeIterator<Item>中的iterator()方法,因爲它實現了Iterable接口。

hasNext(), next(), remove() - these methods are in Iterator interface. 
0

你的迭代實現可迭代的,而不是實現迭代器。總是在應該覆蓋基類或接口方法的方法上添加@Override註釋。

1

看起來像你的內部DequeIterator類是重寫頂級Deque<Item><Item>泛型。請從DequeIterator定義中刪除<Item>。此外,應實施Iterable的課程必須是您的Deque課程,並且DequeIterator必須實施Iterator

public class Deque<Item> implements Iterable<Item> { 
    //implementation... 
    private class DequeIterator implements Iterator<Item> { 
     //implementation... 
    } 
}