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

我认为内部阶层的成员,即使在宣布为私人阶层的时候,也可以从其封闭的阶级中获得。 但我遇到了编译时错误,下面的代码结构。 我的顶级类实现了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可以。 转换返回的值或更改返回类型。

链接地址: http://www.djcxy.com/p/91989.html

上一篇: Accessibility of inner class members from enclosing class

下一篇: Understanding local classes in Java