我认为内部类的成员,即使被声明为私有,也可以从其封闭的类中访问。但是我遇到了以下代码结构的编译时错误。我的顶级类实现了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;
}
}
有什么建议吗?
答案 0 :(得分:2)
您的方法iterator
public Iterator<Item> iterator() // iterator() method
声明返回类型为Iterator<Item>
的值。
类型Iterator
没有名为i
的可访问字段。
您的ShuffleIterator
有。要么转换返回的值,要么更改返回类型。
答案 1 :(得分:2)
因为您的方法iterator()
的返回类型为Iterator<Item>
,并且您在课程i
中没有任何变量Iterator<Item>
。
如果你的方法是:
public ShuffleIterator iterator() // iterator() method
{
return new ShuffleIterator();
}
然后,i
类中存在ShuffleIterator
,您将不会有任何编译错误。