1

我正在尝试制作一个可迭代的列表,但我被困在迭代器部分

这是我的代码

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();

有什么想法或想法吗?

谢谢

4

3 回答 3

2

您需要实际重新实现Iterator接口;没有这样的事情list.iterator()

于 2013-11-08T16:22:13.480 回答
0

您声明list的是一个数组,因此它没有成员iterator(),也没有内部类。iterator做一个实例。

您可以根据返回和返回的位置实现迭代器索引,如果在返回 false后调用它,则抛出 a 。hasNext()index < actIndexnext()list[itIndex]NoSuchElementExceptionhasNext()

于 2013-11-08T16:27:23.300 回答
0

假设你的数组总是被元素完全填充,一个最小的迭代器实现可能如下所示:

@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[])您在构造函数中获得的强制转换发出警告。

于 2013-11-08T17:04:14.780 回答