是否可以使用反射获得易变的场?

时间:2014-09-16 14:38:11

标签: java reflection

Class<? extends Class> clazz = MyClass.class.getClass();
try {
    Field field = clazz.getDeclaredField("mInstance");
    field.setAccessible(true);
    looper = (Looper) field.get(this);
} catch (NoSuchFieldException e1) {
    e1.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (IllegalArgumentException e) {
    e.printStackTrace();
}

该字段声明如下: private volatile Object mInstance;

我收到NoSuchFieldException

2 个答案:

答案 0 :(得分:6)

Class<? extends Class> clazz = MyClass.class.getClass();

应该是

Class<?> clazz = MyClass.class; // or Class<MyClass>

这被称为类文字。表达式为给定类型生成Class对象。在getClass()个实例上调用Class将返回Class的{​​{1}}个实例,而不是Class

(所有这些都假设MyClass中声明了mInstance字段。)

答案 1 :(得分:0)

您应该使用MyClass.class

将在代码后运行简单测试:

class A {
    public static void main(String[] args) {
        System.out.println(A.class.getClass());
        System.out.println(A.class);
    }
}

输出是:

class java.lang.Class
class A

另见Retrieving Class Objects

干杯!!