为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕标5832272 2019-06-24 12:49:32
从内部类对象获取外部类对象我有以下代码。我想获得创建内部类对象的外部类对象。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;}但是,如果我没有修改内部类的控制,那么(仅仅是确认)我们有其他方法从内部类对象获取对应的外部类对象吗?
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

在内部类本身中,可以使用OuterClass.this..该表达式允许引用任何以词汇括起来的实例,在JLS中描述为合资格this.

我没有不过,有一种方法可以从内部类的代码之外获取实例。当然,您可以随时介绍自己的财产:

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

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

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

这个$字符只应在机械生成的源代码中使用,或者很少用于访问遗留系统上已有的名称。


查看完整回答
反对 回复 2019-06-24
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

OuterClass.this引用外部类。


查看完整回答
反对 回复 2019-06-24
?
慕后森

TA贡献1802条经验 获得超5个赞

你可以(但你不应该)在工作中使用反射:

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

当然,隐式引用的名称是完全不可靠的,因此正如我所说的,您不应该:-)


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 922 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信