从外部内部类中封装内部类的外部类实例引用

时间:2019-01-26 23:45:46

标签: java inner-classes

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

例如:下面,方法check()Outer内部提供对Inner类实例的所需引用,以最终使用。

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成员并从那里进行而无需更改{{ 1}}是否以任何方式提供类代码?

注意:见Reference outer class instance from inner classHow to refer to Enclosing class from Inner class?等其他讨论。我希望不是从内部类实例本身内部到达外部类实例。

TIA。

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

编辑:

黑体是线索的关键部分。

1 个答案:

答案 0 :(得分:2)

我认为没有帮助,您无法做到这一点。您需要添加一种方法来返回封闭的实例。

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