来自封闭类的内部类成员的可访问性
我认为内部阶层的成员,即使在宣布为私人阶层的时候,也可以从其封闭的阶级中获得。 但我遇到了编译时错误,下面的代码结构。 我的顶级类实现了Iterable接口。 迭代器在内部类中实现。 当通过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()
的返回类型是Iterator<Item>
,并且您在类Iterator<Item>
没有任何变量i
。
如果你的方法是:
public ShuffleIterator iterator() // iterator() method
{
return new ShuffleIterator();
}
那么你将不会有任何编译错误,因为i
存在于ShuffleIterator
类中。
你的方法iterator
public Iterator<Item> iterator() // iterator() method
被声明为返回类型Iterator<Item>
。
类型Iterator
没有名为i
的可访问字段。
你的ShuffleIterator
可以。 转换返回的值或更改返回类型。
上一篇: Accessibility of inner class members from enclosing class