如果在使用反射时遇到"Class *** can not access a member of class *** with modifiers 'private static final'"的异常,这是因为默认情况下,私有字段是无法直接访问的。要解决这个问题,可以通过以下两种方式之一:
1.设置字段可访问:
import java.lang.reflect.Field;
public class ReflectionExample {
public static void main(String[] args) {
try {
// 获取Class对象
Class<?> myClass = MyClass.class;
// 创建实例
Object obj = myClass.getDeclaredConstructor().newInstance();
// 获取字段
Field myField = myClass.getDeclaredField("myField");
// 设置字段可访问
myField.setAccessible(true);
// 获取字段的值
Object value = myField.get(obj);
System.out.println("Field name: " + myField.getName());
System.out.println("Field value: " + value);
} catch (Exception e) {
e.printStackTrace();
}
}
public static class MyClass {
private static final String myField = "Hello, this is myField!";
}
}
使用反射在调用相应的invoke()
之前先调用setAccessible(true)
,忽略访问权限即可,这样就能够访问private
的成员变量或者方法了。