2

そのため、宿題のために LinkedHashedDictionary の Iterator メンバーを作成しようとしていますが、そのタイプに関して複数の問題があります。

イテレータ インターフェイス:

package nhUtilities.containers2;

public interface Iterator<Element> extends Cloneable, java.util.Iterator<Element>
{
  public void reset ();
  public void advance ();
  public boolean done ();
  public Element get ();
  public boolean equals (Object obj);
  public boolean traverses (Object container);
  public Object clone ();
  public void setEqualTo (Iterator<Element> other);
  public boolean hasNext ();
  public Element next ();
  public void remove ();
}

私のコードには、EntryIterator というプライベート クラスがあります。これは AbstractIterator を拡張しますが、上記の Iterator を実装します。

私の現在の実装は次のとおりです。

private class EntryIterator<Element> extends AbstractIterator<Element>
    implements Iterator<Element>
    {

        protected Iterator<Key> keyIterator;
        protected Dictionary<Key,Value> dictionary;

        public EntryIterator(Dictionary<Key,Value> dictionary)
        {
            keyIterator = keys.iterator();
            this.dictionary = dictionary;
        }

        public void reset()
        { keyIterator = keys.iterator(); }

        /**
         * @Requrie !this.done()
         */
        public void advance()
        { keyIterator.advance(); }

        public boolean done()
        { return keyIterator.done(); }

        // public Entry<Key,Value> get()
        // Violates initial Interface: Results in compile error.
        // Return type must be "Element"
        public Element get()
        {
            Key key = keyIterator.get();
            Value value = dictionary.get(keyIterator.get());
            return (Element) new Entry<Key,Value>(key, value);
        }

        public boolean traverses(Object container)
        {
            // TODO Iterator traverses
            return false;
        }

        public void setEqualTo(Iterator<Element> other)
        {
            this.keyIterator = ((EntryIterator<Element>) other).keyIterator;
            this.dictionary = ((EntryIterator<Element>) other).dictionary;
        }

    }

このクラスの型に関して複数の種類を実行しましたが、どれも私の辞書と互換性がないようです。上記の書式設定のままにしておくと、Dictionary の iterator() 関数でエラーが発生します。

public Iterator<Entry<Key,Value>> iterator()
{
    return new EntryIterator<Entry<Key,Value>>(this);
}

エラーには、「戻り値の型は Dictionary.iterator() と互換性がありません」と記載されています

EntryIterator クラスの型を次のように変更する必要があります。

private class EntryIterator<eEntry<Key,Value>> extends AbstractIterator<Element>
implements Iterator<Element>

「トークン '<' で予期される構文エラー」というエラーと、Dictionary.Iterator() 関数で別の非互換性エラーが表示されるだけです。

これらのさまざまなタイプをすべてリンクして、ディクショナリの契約が要求するものを返すようにする方法について、誰かが私を正しい方向に向けることができますか?

私は、授業中に講師にメールで質問したり、1 対 1 で質問したりしました。どんな助けでも大歓迎です。

4

1 に答える 1

0

したがって、問題は実際には私のクラスのインスタンス化にありました...同様の問題を抱えているすべての人のために:

 private class EntryIterator extends AbstractIterator<Entry<Key,Value>> implements 
nhUtilities.containers2.Iterator<Entry<Key, Value>>
于 2012-10-30T03:45:45.180 に答える