【问题标题】:Implementing Iterator for abstractCollection为 abstractCollection 实现迭代器
【发布时间】:2015-06-05 11:41:41
【问题描述】:

您好,我想为扩展抽象集合的类实现迭代器。

class Name<E extends Comparable<E>>
extends AbstractCollection<CompRational>
implements Iterable<E>{
...
  public Iterator<E> iterator(){
    return new NameIterator<E>(this);
  }
...
}

Iterator 应该是这样的

class NameIterator<E extends Comparable<E>> implements Iterator<E>{
    private Name<E> tree;
    private int pos = 0;

    public NameIterator ( Name<E> t) {
        ...
    }

    @Override
    public boolean hasNext() {
        ...
    }

    @Override
    public E next () {
        ...
    }

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

我收到的错误消息是我的类 Name 没有覆盖或实现 Iterator 并且迭代器无法覆盖迭代器,因为类型不兼容,它说我使用了两个不同的,但是我在哪里、如何以及如何获得摆脱它?

PS:感谢所有有用的 cmets,但我是个白痴,AbstractCollection&lt;CompRational&gt; 的关键部分甚至不是问题的一部分。 Sry 完全忘记了这一点。如果可能,请删除它。

【问题讨论】:

  • 实际上你想做什么来实现 2 Iterators?为什么你想让这两个类都实现Iterator
  • 您可能希望在第一个中实现 Iterable。不是迭代器.
  • 是的,公共类应该是可迭代的而不是迭代器。但我在实际代码中这样做了。
  • The answer to your question is here。另一个问题使用Comparable作为普通的超级接口,而不是Iterable,但是问题是一样的
  • 谢谢,但我不认为这是问题所在。我只是使用了一个现有的类型,我缩进了另一个通用的 E。Sry 在编写问题时没有意识到这个错误。

标签: java generics iterator overriding abstract


【解决方案1】:

没有Collection 实现Iterator。这是Iterator 实例。您的具体集合需要扩展AbstractCollection,并且您的NameIterator 实现Iterator

class Name<E extends Comparable<E>> extends AbstractCollection {

    @Override
    public NameIterator<E> iterator() {
        return new NameIterator<>();
    }

    @Override
    public int size() {
        return 0;
    }
}

class NameIterator<E extends Comparable<E>> implements Iterator{

    @Override
    public boolean hasNext() {
        return false;
    }

    @Override
    public E next() {
        return null;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-25
    • 2011-08-03
    • 2011-09-28
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    相关资源
    最近更新 更多