使用java反射机制获取javabean中的私有属性
2011-06-20 16:43
387 查看
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.
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.
相关文章推荐
- 使用java反射机制获取javabean中的私有属性
- Java使用PropertyDescriptor获取实体类中私有属性的值,并给私有属性赋值
- Java设置以及获取JavaBean私有属性进阶
- Java使用PropertyDescriptor获取实体类中私有属性的值,并给私有属性赋值
- Java反射-获取私有方法及私有属性
- 高效Java03:使用私有构造器或枚举类型强化单例属性
- Runtime的使用4 【获取属性和方法(包括私有)】
- 顺序获取javaBean中的属性和对应的值
- Java访问私有属性(不使用getter方法和反射)
- Java反射之获取私有公共的属性和方法
- 使用java获取系统属性
- java获取bean中的所有属性
- 使用java获取系统属性
- java中使用反射获取对象的属性和属性值
- Java反射获取私有属性并修改
- 使用Java代码在应用层获取Android系统属性
- 如何使用java代码来访问managed-bean 的属性?
- 使用访问器属性模拟java中的私有变量
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- java 使用反射机制来获取私有方法和成员变量