4

これが私のコードです:

import java.util.List;

public class ItemList implements Iterable<Entry> {
    private List<Entry> entries;

    public static class Entry {
        private final String id;
        private int quantity;
    }

    @Overide public Iterator<Entry> iterator() {
        return entries.iterator();
    }
}

このコードはコンパイルされません。(ItemList クラス定義で「エントリ」タイプが見つからないと主張しています)。

他のクラスがこのリストの内部エントリを反復処理できるようにしたいと考えています。Entry クラスを別のファイルに移動したくはありません。そのようにすると、そのクラスの内部動作の多くをパッケージ内の他のすべてのクラスに公開する必要があるからです。

私の質問は次のとおりです。なぜこれはコンパイルされないのですか? そして、この問題を回避する最善の方法は何ですか?

4

2 に答える 2

9

問題はスコープです。は内部クラスであるためEntry、「親」の名前を前に付ける必要があります。これを試して:

class ItemList implements Iterable<ItemList.Entry> {

    private List<Entry> entries;

    public static class Entry {
        private final String id = null;
        private int quantity;     
    }

    @Override public Iterator<Entry> iterator() {
        return entries.iterator();
    }
}
于 2012-07-09T16:46:28.720 に答える
1

エントリーはプライベートクラスのため、他のクラスからは見えません。公開することはできますが、ネストしたままにしておくことができます。

また、外部クラスの状態に依存しないため、静的にする必要があります。

于 2012-07-09T16:39:08.637 に答える