微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Java中,当我不在内部类中时,如何访问外部类?

如何解决在Java中,当我不在内部类中时,如何访问外部类?

Outer$Inner该类的字节码将包含一个名为this$0type 的包作用域Outer。这就是用Java实现非静态内部类的方式,因为在字节码级别上没有内部类的概念。

如果您确实愿意,您应该能够使用反射来读取该字段。我从来不需要这样做,因此最好更改设计以使其不再需要。

这是使用反射时示例代码的外观。天哪,这很丑。;)

public class Outer {
    public static void foo(Inner inner) {
        try {
            Field this$0 = inner.getClass().getDeclaredField("this$0");
            Outer outer = (Outer) this$0.get(inner);
            System.out.println("The outer class is: " + outer);

        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        } catch (illegalaccessexception e) {
            throw new RuntimeException(e);
        }
    }

    public class Inner {
    }

    public void callFoo() {
        // The constructor of Inner must be called in 
        // non-static context, inside Outer.
        foo(new Inner()); 
    }

    public static void main(String[] args) {
        new Outer().callFoo();
    }
}

解决方法

如果我有一个内部类的实例,如何 从不在内部类中的代码 访问外部
?我知道在内部类中,我可以Outer.this用来获取外部类,但是我找不到任何外部方式来获取此类。

例如:

public class Outer {
  public static void foo(Inner inner) {
    //Question: How could I write the following line without
    //  having to create the getOuter() method?
    System.out.println("The outer class is: " + inner.getOuter());
  }
  public class Inner {
    public Outer getOuter() { return Outer.this; }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。