猿问

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

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

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

但是,如果我没有修改内部类的控制,那么(仅仅是确认)我们有其他方法从内部类对象获取对应的外部类对象吗?


慕标5832272
浏览 923回答 3
3回答

红颜莎娜

在内部类本身中,可以使用OuterClass.this..该表达式允许引用任何以词汇括起来的实例,在JLS中描述为合资格this.我没有想不过,有一种方法可以从内部类的代码之外获取实例。当然,您可以随时介绍自己的财产:public OuterClass getOuter() {     return OuterClass.this;}编辑:通过实验,看起来保存对外部类的引用的字段具有包级访问权限-至少对于我正在使用的JDK是这样的。编辑:使用的名称(this$0) 是实际上在Java中有效,尽管JLS不鼓励使用:这个$字符只应在机械生成的源代码中使用,或者很少用于访问遗留系统上已有的名称。

汪汪一只猫

OuterClass.this引用外部类。

慕后森

你可以(但你不应该)在工作中使用反射:import java.lang.reflect.Field;public class Outer {     public class Inner {     }     public static void main(String[] args) throws Exception {         // Create the inner instance         Inner inner = new Outer().new Inner();         // Get the implicit reference from the inner to the outer instance         // ... make it accessible, as it has default visibility         Field field = Inner.class.getDeclaredField("this$0");         field.setAccessible(true);         // Dereference and cast it         Outer outer = (Outer) field.get(inner);         System.out.println(outer);     }}当然,隐式引用的名称是完全不可靠的,因此正如我所说的,您不应该:-)
随时随地看视频慕课网APP

相关分类

Java
我要回答