学科分类
目录
Java Web

修改JavaBean的属性

在Java中,还可以使用内省修改JavaBean的属性。为了让读者更好地掌握如何使用内省修改JavaBean的属性,接下来通过一个案例来演示,如例1所示。

例1 IntrospectorDemo02.java

 1    package cn.itcast.chapter08.introspector;
 2    import java.beans.PropertyDescriptor;
 3    import java.lang.reflect.Method;
 4    import cn.itcast.chapter08.javabean.Person;
 5    public class IntrospectorDemo02 {
 6        public static void main(String[] args) throws Exception {
 7            //创建Person类的对象
 8            Person p = new Person();
 9            //使用属性描述器获取Person类name属性的描述信息
 10            PropertyDescriptor pd = new PropertyDescriptor("name",p.getClass());
 11            //获取name属性对应的setter方法
 12            Method methodName = pd.getWriteMethod();
 13            //调用setter方法,并设置(修改)name属性值
 14            methodName.invoke(p, "小明");
 15            //String类型的数据,表示年龄
 16            String val = "20";
 17            //使用属性描述器获取Person类age属性的描述信息
 18            pd = new PropertyDescriptor("age",p.getClass());
 19            //获取age属性对应的setter方法
 20            Method methodAge = pd.getWriteMethod();
 21            //获取属性的Java数据类型
 22            Class clazz = pd.getPropertyType();
 23            //根据类型来判断需要为setter方法传入什么类型的实参
 24            if(clazz.equals(int.class)){
 25                //调用setter方法,并设置(修改)age属性值
 26                methodAge.invoke(p, Integer.valueOf(val));
 27            }else{
 28                methodAge.invoke(p, val);
 29            }
 30            System.out.println(p);
 31        }
 32    }

运行结果如图1所示。

图1 运行结果

在例1中,第10行代码通过PropertyDescriptor描述器获取Person类中name属性的描述信息,第12行代码用于获取name属性的setter方法,第14行代码调用setter方法并传入实参,第22~29行代码用于获取age属性的数据类型,然后根据类型来判断为setter传入什么类型的实参。需要注意的是,使用内省设置属性的值时,必须要设置对应数据类型的数据,否则程序会出错。

点击此处
隐藏目录