2011-05-25 114 views
4

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

此方法应该对顶级类的唯一实例起作用,所以感觉就像我不应该在静态类中实例化顶级类。

基本上,我想是这样

public class TopLevel{ 
    // private 
    int innerV 

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

是否有可能只是说this.innerVfor环和类似的地方相似的地方?

+0

您是否试图实际编写并编译它? – 2011-05-25 08:10:52

+0

请查看我的编辑 - 我已更正了代码格式。 TY。 – lzap 2011-05-25 08:16:33

回答

8

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

声明你的内部类static删除了这个链接,所以你需要将外部类的实例作为参数传递给内部类方法(或其构造函数),或者在方法内部创建它。

+0

我希望有一种解决方法。删除“静态”为我的具体应用程序有一些问题....将尝试弄清楚。谢谢你让我知道有没有作弊解决方案,但! – algorithmicCoder 2011-05-25 08:16:42

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; 
    } 
    } 
} 
+0

正如一边:你不需要在for循环之前分配t1.innerV吗? – algorithmicCoder 2011-05-25 11:25:05

+0

就是这样的。对于整数,Java默认为零,所以它编译,但循环永远不会顺便执行。 – lzap 2011-05-26 08:57:15

0

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

相关问题