如何解决在Java中,当我不在内部类中时,如何访问外部类?
Outer$Inner
该类的字节码将包含一个名为this$0
type
的包作用域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 举报,一经查实,本站将立刻删除。