引用静态内部类中的非静态变量

时间:2011-05-25 08:08:39

标签: java oop inner-classes nested-class

我需要从静态类中的方法引用顶级类的变量。

此方法应该作用于顶级类的唯一实例,因此我觉得我不应该在静态类中实例化顶级类。

基本上我想要像

这样的东西
public class TopLevel{
   // private
   int innerV

   public static class Inner implements X {
     for(i=0; i<innerV,i++){
         doSomething 
     }
   }
}

是否可以在this.innerV循环和类似地方说for或类似内容?

3 个答案:

答案 0 :(得分:8)

static内部类,您不能直接引用外部类的(非静态)成员。如果删除静态限定符,它将起作用,因为非静态内部类的实例隐式绑定到包含类的实例,因此它们可以直接引用其成员。

声明内部类static会删除此链接,因此您需要将外部类的实例作为参数传递给内部类方法(或其构造函数),或者在方法内部创建它。 / p>

答案 1 :(得分:1)

无法做到。创建一个TopLevel实例,如果你创建了一个innerV访问器(getter / setter)或将其公开,那么就可以了。

public class TopLevel {
   public int innerV

   public static class Inner implements X {
     for(i=0; i<innerV,i++){
         TopLevel tl = new TopLevel()
         tl.innerV = 12345678;
     }
   }
}

答案 2 :(得分:0)

你不能这样做,因为它没有意义,只是从静态函数引用非静态成员是有道理的。在静态内部类的上下文中没有外部类的当前实例来从中获取实例变量。