【发布时间】:2016-09-17 15:52:31
【问题描述】:
我正在尝试使用 Iterator 作为内部类来实现 Collection 接口。实现集合的 ArrayCollection 类有一个泛型数组(说类成员是泛型的是否正确?)。 a screenshot from IDE
public class ArrayCollection<T> implements Collection<T> {
private T[] m = (T[])new Object[10];
但是,当我为 Iterator 接口实现方法 next() 时,我不断收到 Incompatible types 错误。但是,如果将 ArrayIterator 设为非泛型类编译器,则数组类型转换不再存在问题。 an error screenshot from IDE
private class ArrayIterator<T> implements Iterator<T> {
private int cursor = 0;
@Override
public boolean hasNext() {
return this.cursor >= ArrayCollection.this.size();
}
@Override
public T next() {
return ArrayCollection.this.m[cursor++];
}
}
所以我有几个问题:
如果我将 ArrayIterator 设为非泛型,编译器怎么能定义 T[] m 数组类型?
是否只有实现/扩展泛型接口/类的内部类可以是非泛型的?
【问题讨论】:
-
你能在这里分享代码吗?
-
添加了代码。还有来自IDE的链接截图。我的堆栈溢出评分太低,无法直接将图像添加到问题中。
-
从不添加图片,添加代码
-
不应该
hasNext()方法使用<,而不是>=吗? --- 您还应该在next()中再次检查以正确抛出NoSuchElementException而不是当前将发生的ArrayIndexOutOfBoundsException。
标签: java generics data-structures collections types