一尘不染

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

java

我有以下代码。我想掌握用来创建内部类对象的外部类对象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;
}

但是,如果我没有控制权来修改内部类,那(只是确认一下),我们还有其他方法可以从内部类对象中获取相应的外部类对象吗?


阅读 1127

收藏
2020-02-27

共1个答案

一尘不染

在内部类本身中,你可以使用OuterClass.this。该表达式允许引用任何词法包围的实例,在JLS中被描述为Qualifiedthis

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

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

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

编辑:使用(这个名字this$0)是在Java中确实有效,虽然JLS阻碍了它的用法:

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

2020-02-27