我正在尝试创建一个可迭代的列表,我陷入了迭代器部分
这是我的代码
import java.util.Iterator;
public class MappableList<T> implements Iterable<T> {
T list[];
public MappableList(T arg1, T arg2, T arg3, T arg4) {
list = (T[]) new Object[4];
list[0] = arg1;
list[1] = arg2;
list[2] = arg3;
list[3] = arg4;
}
void printList() {
for (int i = 0; i < 4; i++) {
System.out.println(list[i]);
}
}
@Override
public Iterator<T> iterator() {
Iterator<T> iter = new list.iterator();
return iter;
}
}
它不适用于
部分Iterator<T> iter = new list.iterator();
任何想法或想法?
由于
答案 0 :(得分:2)
您需要实际重新实现Iterator
接口;没有list.iterator()
这样的东西。
答案 1 :(得分:0)
您已声明list
是一个数组,因此它没有成员iterator()
而且没有内部类。 iterator
制作一个实例。
您可以根据hasNext()
返回index < actIndex
的位置实现iterator索引,next()
返回list[itIndex]
,如果被调用则会引发NoSuchElementException
在hasNext()
返回false之后。
答案 2 :(得分:0)
假设您的数组总是完全填充元素,最小的Iterator实现可能如下所示:
@Override public Iterator<T> iterator()
{
final T[] list = this.list;
return new Iterator<T>()
{
int idx;
public boolean hasNext() { return idx < list.length; }
public T next() { return list[ idx++ ]; }
public void remove() { throw new UnsupportedOperationException(); }
};
}
顺便说一下,您应该考虑将list
成员声明为私有。直接从具有关于类型T的较窄定义(即特殊子类)的知识的地方访问它可能会在运行时导致ClassCastExceptions,即使代码编译得很好而只是警告您在构造函数中获得的(T[])
强制转换。