这是我的代码:
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”类型。)
我希望其他类能够遍历此List的内部条目。我宁愿不将Entry类移动到单独的文件中,因为这需要将该类的许多内部工作暴露给包中的所有其他类。
我的问题是:为什么不编译?而且,围绕这个问题的最佳方法是什么?
答案 0 :(得分: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();
}
}
答案 1 :(得分:1)
Entry是一个私有类,因此其他类将无法看到它。你可以把它公开但仍然保持嵌套。
它也应该是静态的,因为它不依赖于外部类的任何状态。