封闭 class 内部 class 成员的可访问性

Accessibility of inner class members from enclosing class

我认为内部 class 的成员,即使声明为私有,也可以从其封闭的 class 访问。但是我 运行 进入以下代码结构的编译时错误。我的顶级 class 实现了 Iterable 接口。迭代器在内部 class 中实现。当通过 iterator() 方法获取内部 class 的实例时,我无法使用该实例访问数据字段。

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

 public Iterator<Item> iterator()        // iterator() method

声明为 return 类型 Iterator<Item> 的值。

类型 Iterator 没有名为 i 的可访问字段。

你的 ShuffleIterator 会。转换 returned 值或更改 return 类型。

因为你的方法 iterator() 的 return 类型是 Iterator<Item>,而你在 class Iterator<Item>.

如果您的方法是:

 public ShuffleIterator iterator()        // iterator() method
     { 
         return new ShuffleIterator();
     }

那么你不会有任何编译错误,因为 i 存在于 ShuffleIterator class.