当然有这种方式:OuterClass.this
。但那非常笨拙。理想情况下,关键字outer
就像super
一样。
有没有办法反思性地做到这一点? (我没有找到任何方法,隐藏的outer
引用似乎没有显示在Class#getFields()
的结果中。)
也许Java7中有一种方法?
EDIT。 考虑一下我刚刚发现的类似问题:
答案 0 :(得分:9)
唯一的方法是使用OuterClass.this
来引用包含的类。
这不是问题,如果您需要多次引用包含类实例,只需将其分配给局部变量,而不必多次处理此语法。 final OuterClass oc = OuterClass.this;
然后你只需在本地使用oc
来做你需要做的事情。
拥有另一个关键字outer
只会混淆正在发生的事情。语法OuterClass.this
显式定义了正在发生的事情,泛型关键字将隐藏包含类的标识,特别是如果它嵌套在多个内部类中。 outer.this.outer.this.outer.this
很可怕!
这不是任何想象力的负担。特别是现代IDE。
答案 1 :(得分:-1)
Object innerClassInstance = null; //get an inner class instance from somewhere.
Object outerClassInstance = null;
Field[] fields = innerClassInstance.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String name = field.getName();
Object value = field.get(innerClassInstance);
if ("this$0".equals(name) && value != null) {
outerClassInstance = value;
break;
}
}
if (outerClassInstance != null) {
// now do something with your outer class instance
}