读书人

利用java反照机制访问JavaBean中的私有

发布时间: 2012-12-21 12:03:49 作者: rapoo

利用java反射机制访问JavaBean中的私有属性
public ? class ? TestReflect ? {?
???????????public ? static ? void ? main(String[] ? args){?
??????????????????????APerson ? a=new ? APerson();?
??????????????????????Field ? fields[] ? = ? a.getClass().getDeclaredFields();?
??????????????????????String[] ? name ? = ? new ? String[fields.length];?
??????????????????????Object[] ? value ? = ? new ? Object[fields.length];?
????????????????????????????
??????????????????????try{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Field.setAccessible(fields, ? true);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? for ? (int ? i ? = ? 0; ? i ? < ? name.length; ? i++) ? {?
???????????????????????????????????????name[i] ? = ? fields[i].getName();?
???????????????????????????????????????System.out.println(name[i] ? + ? "-> ");?
???????????????????????????????????????value[i] ? = ? fields[i].get(a);?
???????????????????????????????????????System.out.println(value[i]);?
??????????????????????????????? }?
??????????????????????}?
??????????????????????catch(Exception ? e){?
???????????????????????????????e.printStackTrace();?
??????????????????????}?
??????????}
}

class ? APerson{?
????????????????private??String ? name;?
????????????????private??String ? sex;?
????????????????private ? int ? age;?

????????????????APerson(){?
???????????????????????name= "John ";?
???????????????????????sex= "男 ";?
???????????????????????age=45;?
????????????????}

? ? ? ? ? ? ? ? public ? int ? getAge() ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return ? age;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? public ? void ? setAge(int ? age) ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? this.age ? = ? age;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? public ? String ? getName() ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return ? name;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? public ? void ? setName(String ? name) ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? this.name ? = ? name;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? public ? String ? getSex() ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return ? sex;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? public ? void ? setSex(String ? sex) ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? this.sex ? = ? sex;
? ? ? ? ? ? ? ? }
}

以上代码中,Field.setAccessible(fields, ? true); 是最为关键的一点。

在使用java反射机制获取 JavaBean 的属性值时,如果该属性被声明为private 的,需要将setAccessible设置为true. 默认的值为false.

读书人网 >编程

热点推荐