反射可以获取类的各种属性和方法,不论是否为私有。
- 如果要通过反射获取的
field是私有的, 则需要使用getDeclaredField, 如果是public的,则可以使用getField. - 如果通过
getDeclaredField获取类的私有属性,则在使用该属性前要先设置可访问性:someField.setAccessible(true);
public class Person {
private int age;
private String name;
public Person() {
}
}
public class ReflectDemo2 {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
Class<Person> cls = Person.class;
Person person = new Person();
// 获取私有属性
Field age = cls.getDeclaredField("age");
// 暴力反射, 如果不写,报IllegalAccessException
age.setAccessible(true);
age.set(person, 20);
Object o = age.get(person);
System.out.println(o); // 20
}
}
本文探讨了Java反射机制,特别关注如何处理IllegalAccessException。当尝试访问私有属性或方法时,反射提供了setAccessible(true)来允许访问。了解这一技巧对于理解和利用Java反射至关重要。
748

被折叠的 条评论
为什么被折叠?



