浏览 6618 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-10
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();返回的类型每次可能不一样,为什么??) 一直没有想清楚. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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的反射机制相关知识,就更明白了。 |
|
返回顶楼 | |
发表时间:2007-01-10
MethodReplacer也是同样的道理
|
|
返回顶楼 | |