1

当然有这种方式:OuterClass.this. 但这非常笨拙。理想情况下,会有一个关键字outer,就像super.

有什么方法可以反思吗?(我还没有找到任何方法,隐藏的outer引用似乎没有出现在结果中Class#getFields()。)

也许Java7中有一种方法?

编辑。考虑一下我刚刚发现的类似问题:

是否有语法可以从另一个匿名内部类获取对匿名内部类的引用?

4

2 回答 2

9

唯一的方法是使用OuterClass.this来引用包含的类。

这不是问题,如果您需要多次引用包含的类实例,您只需将其分配给局部变量,您不必多次处理此语法。final OuterClass oc = OuterClass.this;然后你只需oc在本地使用来做你需要做的任何事情。

使用另一个关键字 likeouter只会混淆正在发生的事情。语法OuterClass.this 明确定义了正在发生的事情,通用关键字将隐藏包含类的身份,特别是如果它嵌套在多个内部类中。outer.this.outer.this.outer.this太可怕了!

这不是任何想象力的负担。尤其是现代 IDE。

于 2012-07-01T18:33:46.197 回答
-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
                }

于 2014-08-22T20:43:24.837 回答