论坛首页 Java企业应用论坛

关于PropertyDescriptor 类的一个问题

浏览 6618 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-10  
下面代码是将Map中的name/value放入一个bean里面

public static void setProperties(Object bean, Map properties) {
        try {
            // Loop through all the property names in the Map
            for (Iterator iter = properties.keySet().iterator(); iter.hasNext();) {
                String propName = (String)iter.next();
                try {

                    PropertyDescriptor descriptor = new PropertyDescriptor(
                            propName, bean.getClass());

                    Class propertyType = descriptor.getPropertyType();

                    Object value = decode(propertyType, (String)properties.get(propName));
                    descriptor.getWriteMethod().invoke(bean, new Object[] { value });
                }
                catch (IntrospectionException ie) {

                }
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }


private static Object decode(Class type, String value) throws Exception {
        if (type.getName().equals("java.lang.String")) {
            return value;
        }
        if (type.getName().equals("boolean")) {
            return Boolean.valueOf(value);
        }
        if (type.getName().equals("int")) {
            return Integer.valueOf(value);
        }
        if (type.getName().equals("long")) {
            return Long.valueOf(value);
        }
        if (type.getName().equals("float")) {
            return Float.valueOf(value);
        }
        if (type.getName().equals("double")) {
            return Double.valueOf(value);
        }
        if (type.getName().equals("java.awt.Color")) {
            StringTokenizer tokens = new StringTokenizer(value, ",");
            int red = Integer.parseInt(tokens.nextToken());
            int green = Integer.parseInt(tokens.nextToken());
            int blue = Integer.parseInt(tokens.nextToken());
            return new Color(red, green, blue);
        }
        if (type.getName().equals("java.lang.Class")) {
            return Class.forName(value);
        }
        return null;
    }

问题:
PropertyDescriptor descriptor = new PropertyDescriptor(
                            propName, bean.getClass());
我的理解是,给这个bean增加一个属性,而propName是属性名称.
如果是这样理解的话,那么这个属性返回是什么类型的数据?
descriptor.getPropertyType();得到属性返回值类型,(到底是什么类型)
decode函数根据返回类型赋值.(说明descriptor.getPropertyType();返回的类型每次可能不一样,为什么??)
一直没有想清楚.
   发表时间:2007-01-10  
引用
PropertyDescriptor descriptor = new PropertyDescriptor(
propName, bean.getClass());
我的理解是,给这个bean增加一个属性,而propName是属性名称.
如果是这样理解的话,那么这个属性返回是什么类型的数据?
descriptor.getPropertyType();得到属性返回值类型,(到底是什么类型)
decode函数根据返回类型赋值.(说明descriptor.getPropertyType();返回的类型每次可能不一样,为什么??)
一直没有想清楚.

   第二个参数就是属性所在的类,通过反射机制就可以知道属性的类型了,

public  Class FooBean{
   private int a ;
   private String b;
   //get/setter
}
   你通过定义一个PropertyDescriptor
   PropertyDescriptor  p = new PropertyDescriptor("b",FooBean.class)
   p.getPropertyType() 将返回String.class。
   你可以去学习一下Java的反射机制相关知识,就更明白了。
0 请登录后投票
   发表时间:2007-01-10  
MethodReplacer也是同样的道理
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics