【问题标题】:What are the types of objects related to implementing Iterable实现Iterable相关的对象有哪些类型
【发布时间】:2014-12-12 09:08:43
【问题描述】:

过去两天我在整个实现 Iterable 接口的事情上迷失了方向。

我已经阅读了一些博客等,并发现要实现 Iterable 我显然需要一个返回 Iterator 的函数,称为 iterator() 但在整个实现过程中迷失了方向。

现在,我读到的是我需要

public class MyCollection<E> implements Iterable<E>{

    public Iterator<E> iterator() {
        return new MyIterator<E>();
    }
}

然后我需要

public class MyIterator <T> implements Iterator<T> {

    public boolean hasNext() {

        //implement...
    }

    public T next() {
        //implement...;
    }

    public void remove() {
        //implement... if supported.
    }
}

现在,我不明白的是 E 和 T 需要是什么类型。 哪些必须与我正在迭代的内容相关,哪些可以/必须是通用的?

我试过了

public Iterator<SimpleHashtable.TableEntry> iterator() {
    return new TableEntryIterator<SimpleHashtable.TableEntry>();
}

但我收到了Type mismatch: cannot convert from SimpleHashtable.TableEntryIterator&lt;SimpleHashtable.TableEntry&gt; to Iterator&lt;SimpleHashtable.TableEntry&gt; 错误。

Plox 帮助指导

【问题讨论】:

  • TableEntryIterator的定义在哪里?
  • 我还没写完呢。错误是因为它不完整吗?
  • 我不知道你是否不给我们看...
  • 您的类 TableEntryIterator 似乎没有实现 Iterator。
  • @almasshaikh 它没有实现Iterator&lt;SimpleHashtable.TableEntry&gt;

标签: java generics types interface iterator


【解决方案1】:

ET 是泛型类型参数,如果您的实现是泛型的,则将它们作为参数保留。 (也可以写一个类来修复一个或多个参数,比如MyIntegerCollection implements Iterator&lt;Integer&gt;。)

在这种情况下,E 代表“元素”(集合中元素的类型),T 代表“类型”(迭代器返回的对象类型)。对于如何命名这些没有内在要求,但这些是集合和迭代器的约定。

您的方法通常是正确的。但是请注意,如果Iterator 是集合的内部类(这很常见),则不应引入新的泛型参数;只需使用集合声明中的相同 E

至于您遇到的具体错误,我们需要查看该代码。很可能,您忘记声明 TableEntryIterator implements Iterator&lt;E&gt;

【讨论】:

  • 是扩展还是实现?
  • @DominikDitoIvosevic 在这种情况下,应该是implements。在泛型类型边界的其他地方有我的头。
猜你喜欢
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多