在Java中,从内部(类)对象访问“外部对象”?

时间:2012-07-01 18:29:56

标签: java reflection

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

有没有办法反思性地做到这一点? (我没有找到任何方法,隐藏的outer引用似乎没有显示在Class#getFields()的结果中。)

也许Java7中有一种方法?

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

Is there a syntax to get the reference to an anonymous inner class from a further anonymous inner class?

2 个答案:

答案 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
                }