在静态内部类中引用非静态变量
我需要从静态类中的方法引用*类的变量。在静态内部类中引用非静态变量
此方法应该对*类的唯一实例起作用,所以感觉就像我不应该在静态类中实例化*类。
基本上,我想是这样
public class TopLevel{
// private
int innerV
public static class Inner implements X {
for(i=0; i<innerV,i++){
doSomething
}
}
}
是否有可能只是说this.innerV
或for
环和类似的地方相似的地方?
从static
内部类中,不能直接引用外部类的(非静态)成员。如果你删除了静态限定符,它将起作用,因为非静态内部类的实例隐含地绑定到包含类的实例,所以它们可以直接引用其成员。
声明你的内部类static
删除了这个链接,所以你需要将外部类的实例作为参数传递给内部类方法(或其构造函数),或者在方法内部创建它。
我希望有一种解决方法。删除“静态”为我的具体应用程序有一些问题....将尝试弄清楚。谢谢你让我知道有没有作弊解决方案,但! – algorithmicCoder 2011-05-25 08:16:42
你不能那样做。创建一个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;
}
}
}
正如一边:你不需要在for循环之前分配t1.innerV吗? – algorithmicCoder 2011-05-25 11:25:05
就是这样的。对于整数,Java默认为零,所以它编译,但循环永远不会顺便执行。 – lzap 2011-05-26 08:57:15
你不能这样做,因为它没有任何意义,除了从静态函数中引用非静态成员是有道理的。在静态内部类的上下文中没有外部类的实例来获取实例变量。
您是否试图实际编写并编译它? – 2011-05-25 08:10:52
请查看我的编辑 - 我已更正了代码格式。 TY。 – lzap 2011-05-25 08:16:33