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() 函数上收到一条错误消息,提示“令牌'<' 上应有语法错误”以及另一个不兼容错误。

有人能指出我如何将所有这些不同类型联系起来以使它们返回我的字典合同要求的正确方向吗?

我曾尝试在课堂上通过电子邮件向讲师提出我的问题,以及一对一的问题,但只是为了避免。任何帮助将非常感激。

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 回答