【问题标题】:Java Dictionary Iterator Type issuesJava 字典迭代器类型问题
【发布时间】:2012-10-15 03:38:51
【问题描述】:

所以我正在尝试为家庭作业创建一个 LinkedHashedDictionary 的迭代器成员,但是我在其类型方面遇到了多个问题。

迭代器接口:

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>

我只是收到一条错误消息,提示“令牌 '

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

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

【问题讨论】:

    标签: java interface dictionary iterator contract


    【解决方案1】:

    所以,问题实际上出在我的类实例化上……这里是为所有有类似问题的人准备的:

     private class EntryIterator extends AbstractIterator<Entry<Key,Value>> implements 
    nhUtilities.containers2.Iterator<Entry<Key, Value>>
    

    【讨论】:

      猜你喜欢
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 2020-07-14
      • 2015-06-17
      • 2019-10-17
      • 2016-06-15
      相关资源
      最近更新 更多