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

时间:2015-02-15 22:16:12

标签: java iterator inner-classes access-modifiers

我认为内部类的成员,即使被声明为私有,也可以从其封闭的类中访问。但是我遇到了以下代码结构的编译时错误。我的顶级类实现了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;     
     }
}

有什么建议吗?

2 个答案:

答案 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,您将不会有任何编译错误。