从内部类对象获取外部类对象

2022-08-31 05:22:15

我有以下代码。我想获得外部类对象,我使用它创建了内部类对象。我该怎么做?inner

public class OuterClass {

    public class InnerClass {
        private String name = "Peakit";
    }

    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        InnerClass inner = outer.new InnerClass();
       // How to get the same outer object which created the inner object back?
        OuterClass anotherOuter = ?? ;

        if(anotherOuter == outer) {
             System.out.println("Was able to reach out to the outer object via inner !!");
        } else {
             System.out.println("No luck :-( ");
        }
    }
}

编辑:好吧,你们中的一些人建议通过添加一个方法来修改内部类:

public OuterClass outer() {
   return OuterClass.this;
}

但是,如果我无法控制修改内部类,那么(只是为了确认)我们是否有其他方法从内部类对象获取相应的外部类对象?


答案 1

在内部类本身中,可以使用 。此表达式允许引用任何词法封闭实例,在 JLS 中描述为限定 thisOuterClass.this

不过,我不认为有办法从内部类的代码之外获取实例。当然,您可以随时介绍自己的房产:

public OuterClass getOuter() {
    return OuterClass.this;
}

编辑:通过实验,看起来保存对外部类引用的字段具有包级访问权限 - 至少对于我正在使用的JDK。

编辑:使用的名称()实际上在Java中有效,尽管JLS不鼓励使用它:this$0

该字符应仅在机械生成的源代码中使用,或者很少用于访问遗留系统上预先存在的名称。$


答案 2

OuterClass.this引用外部类。


推荐