是否可以使用反射获得易失性场


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.

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

应该是

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

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

(所有这些都假定字段mInstanceMyClass 中声明。

你应该使用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

另请参阅检索类对象

干杯!!

相关内容

  • 没有找到相关文章