当然有这种方式:OuterClass.this
. 但这非常笨拙。理想情况下,会有一个关键字outer
,就像super
.
有什么方法可以反思吗?(我还没有找到任何方法,隐藏的outer
引用似乎没有出现在结果中Class#getFields()
。)
也许Java7中有一种方法?
编辑。考虑一下我刚刚发现的类似问题:
当然有这种方式:OuterClass.this
. 但这非常笨拙。理想情况下,会有一个关键字outer
,就像super
.
有什么方法可以反思吗?(我还没有找到任何方法,隐藏的outer
引用似乎没有出现在结果中Class#getFields()
。)
也许Java7中有一种方法?
编辑。考虑一下我刚刚发现的类似问题:
唯一的方法是使用OuterClass.this
来引用包含的类。
这不是问题,如果您需要多次引用包含的类实例,您只需将其分配给局部变量,您不必多次处理此语法。final OuterClass oc = OuterClass.this;
然后你只需oc
在本地使用来做你需要做的任何事情。
使用另一个关键字 likeouter
只会混淆正在发生的事情。语法OuterClass.this
明确定义了正在发生的事情,通用关键字将隐藏包含类的身份,特别是如果它嵌套在多个内部类中。outer.this.outer.this.outer.this
太可怕了!
这不是任何想象力的负担。尤其是现代 IDE。
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
}