【问题标题】:Enclosing outer class instance reference of an inner class from outside inner class [duplicate]从外部内部类中包含内部类的外部类实例引用[重复]
【发布时间】:2019-01-26 23:45:45
【问题描述】:

每个内部类实例都“生活”在其外部类的一个实例中。问题是——当内部类没有指向其外部类实例的成员时,如何在给定内部类实例的情况下引用外部类的实例?

例如:在下面,方法check() 提供了来自Inner 中的Outer 类实例的所需引用以供最终使用。

public class Outer {

int cnt = 0; 

class Inner {
    boolean check() {
    return cnt==10;
    }

}

public static void stuff(Outer.Inner in) {
    if (in.check()) 
    // if (<cnt value of its enclosing Outer class instance is 10>) 
    //      do sth here
    ;
}
}

但是 - 假设方法 check() 不存在。

public class Outer {

int cnt = 0; 

class Inner {

}

public static void stuff(Outer.Inner in) {
    if (<cnt value of its enclosing Outer class instance is 10>) 
    //      do sth here
    ;
}
}

那么,引用Outer.Inner in 的外部类实例的语法是什么,以便可以引用该实例的cnt 成员并从那里在不更改Inner 类代码的情况下有什么办法吗?

注意:在其他一些讨论中看到 Reference outer class instance from inner classHow to refer to Enclosing class from Inner class?。我正在寻找外部类实例而不是内部类实例本身。

TIA。

//----------------

编辑:

以粗体显示线索的一个关键部分。

【问题讨论】:

  • cnt 是一个实例变量,所以它不只是outer.cnt吗?
  • @markspace - 好吧 - 这就是问题所在。你首先要得到outer,这样你就可以参考它的成员cnt
  • @Gab - 它是重复的。谢谢参考。

标签: java inner-classes


【解决方案1】:

我不认为没有帮助你可以做到这一点。您需要添加一个方法来返回封闭的实例。

Referencing an enclosing instance from an inner class

public class Outer {

  int cnt = 0; 

  class Inner {
    boolean check() {
      return cnt==10;
    }
    Outer getOuter() { return Outer.this; }    
  }

  public static void stuff(Outer.Inner in) {
    int count = in.getOuter().cnt;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    相关资源
    最近更新 更多