【发布时间】:2015-04-16 09:33:17
【问题描述】:
我认为内部类的成员,即使声明为私有,也可以从其封闭类访问。但是我遇到了以下代码结构的编译时错误。我的顶级类实现了 Iterable 接口。 Iterator 在内部类中实现。当通过 iterator() 方法获得内部类的实例时,我无法使用该实例访问数据字段。
public class RandomQueue<Item> implements Iteralbe<Item>
{
public RandomQueue() {}
public Iterator<Item> iterator() // iterator() method
{
return new ShuffleIterator();
}
// inner class implementing iterator
private class ShuffleIterator implements Iterator<Item>
{
private int i; // private data field in inner class.
.......
public boolean hasNext() {...}
public Item next() {...}
public void remove() {...}
}
public void doSomething()
{
// Compile time error. "i cannot be resolved or is not a field"
int j = iterator().i;
}
}
有什么建议吗?
【问题讨论】:
-
Iterator类型没有名为i的可访问字段。您认为您使用iterator().i访问的是什么? -
我希望实现迭代器,以便它遍历一个数组并在这样做时对其进行洗牌。所以除了接口抽象方法外,我还添加了一些数据字段和方法。 iterator().someDataField 需要返回洗牌操作的结果。
-
明确一点:这不是关于内部类,也不是关于
private。
标签: java iterator inner-classes access-modifiers