首页 > 解决方案 > 封闭来自外部内部类的内部类的外部类实例引用

问题描述

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

例如:在下文中,该方法从内部提供对类实例check()的所需引用以供最终使用。 OuterInner

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类代码?

注意:见从内部类引用外部类实例如何从内部类引用封闭类?在其他一些讨论中。我正在寻找外部类实例而不是内部类实例本身。

TIA。

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

编辑:

将线索的一个关键部分加粗。

标签: javainner-classes

解决方案


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

从内部类引用封闭实例

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

推荐阅读