Introspector内省
下面我们用内省的方式操作JavaBean
首先我们先定义一个JavaBean类
public class Person {
private int x;
private int y;
Person(){}
public Person(int age, int height){
this.x = age;
this.y = height;
}
public int getAge() {
return x;
}
public void setAge(int age) {
this.x = age;
}
public int getHeight() {
return y;
}
public void setHeight(int height) {
this.y = height;
}
}
我们只知道这个类的属性名,存放在一个字符串中,我们要得到它的值,必须要先把它转化为get方法的名字,然后通过方法的反射调用获得它的值。内省用它的一套办法简化了上面这个操作。
下面用内省的方式操作JavaBean。
获取age的值
//创建对象
Person p1 = new Person(24,178);
//对象的属性名存在字符串中
String propertyName = "age";
//把Person作为JavaBean,通过内省的方法操作JavaBean
PropertyDescriptor pd = new PropertyDescriptor(propertyName, p1.getClass());
//得到Person对应属性名的get方法
int retVal = (int)pd.getReadMethod().invoke(p1);
//打印
System.out.println(retVal);
修改height的值
//属性名
String propertyName2 = "height";
//内省的方式操作javaBean
PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2, p1.getClass());
//获得对应属性的set方法,反射方式调用
pd2.getWriteMethod().invoke(p1, 180);