【问题标题】:Referencing non static variable from within static Inner Class从静态内部类中引用非静态变量
【发布时间】:2011-09-01 13:25:53
【问题描述】:

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

这个方法应该作用于顶级类的唯一实例,所以感觉我不应该在静态类中实例化顶级类。

基本上我想要类似的东西

public class TopLevel{
   // private
   int innerV

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

是否可以在 for 循环和类似的地方只说 this.innerV 或类似的东西?

【问题讨论】:

  • 您是否尝试过实际编写并编译它?
  • 请检查我的编辑 - 我已经更正了代码格式。泰。

标签: java oop inner-classes nested-class


【解决方案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;
     }
   }
}

【讨论】:

  • 顺便说一句:你不需要在 for 循环之前分配 t1.innerV 吗?
  • 是的,类似的。对于 int,Java 默认为零,因此它可以编译,但循环永远不会被执行。
【解决方案2】:

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

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

【讨论】:

  • 我希望有办法解决这个问题。为我的特定应用程序删除“静态”存在一些问题....将尝试解决。感谢您让我知道没有作弊解决方案!
【解决方案3】:

您不能这样做,因为它没有意义,就像从静态函数中引用非静态成员一样有意义。静态内部类的上下文中没有外部类的当前实例可以从中获取实例变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 2019-03-17
    相关资源
    最近更新 更多