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”类型)。

我希望其他类能够迭代此列表的内部条目。我宁愿不将 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 回答