有些東西我缺少泛型和/或內部類。我想用專門的迭代器編寫一個專門的樹類。 FooTree類如何有一個迭代器來返回類型爲FooTree的連續節點而不是類型V的節點值?該類開始:類型不匹配:無法將MyClass <E>轉換爲MyClass <E>
public class FooTree<V>
private final V value;
private FooTree<V> left;
private FooTree<V> right;
我將Iterator類作爲內部類,因爲沒有人會關心它。在FooTree定義獲得的迭代器工廠方法是:
public Iterator<FooTree<V>> preorderIterator() {
return this.new PreorderIterator<FooTree<V>>;
}
由於下一個()必須返回一個V,如在接口中聲明,我添加nextNode()來獲得周圍的返回類型。內部類開始:
private class PreorderIterator<V> implements Iterator<V> {
private FooTree<V> current;
. . .
public FooTree<V> nextNode() {
current = FooTree.this; **
我得到這個美好的編譯器錯誤:
Type mismatch: cannot convert from ...FooTree<V> to ...FooTree<V>
(兩者是相同的封裝)
誒!?WOT
我可以通過添加一個cast來編譯它:current =(FooTree)FooTree.this; 但是我爲什麼要首先呢? 它試圖成爲「聰明」,並計算出第一個V可能不同於第二個V?
這樣做的正確方法是什麼?
謝謝!一旦我放棄內心階層也需要明確參數化的偏見,我在探索時所得到的所有錯誤和提示都將落實到位。 – 2013-04-11 16:17:54