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

配列が常に要素で完全に満たされることを意図していると仮定すると、最小の 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 のより狭い定義 (特殊化されたサブクラス) に関する知識がある場所から直接アクセスすると、コンストラクターで(T[])取得したキャストの警告だけでコードが正常にコンパイルされても、実行時に ClassCastExceptions が発生する可能性があります。

于 2013-11-08T17:04:14.780 に答える
0

宣言しlistたのは配列であるため、メンバーがなくiterator()、内部クラスが少ないです。iteratorのインスタンスを作成します。

false が返された後に呼び出された場合は、戻り値と戻り値に基づいてイテレータインデックスを実装できます。hasNext()index < actIndexnext()list[itIndex]NoSuchElementExceptionhasNext()

于 2013-11-08T16:27:23.300 に答える