keyboardsun 发表于 2013-2-6 09:59:50

JAVA bean 复制 数据转化 用于两个对象的filed的值的根据set方法和get方法转换

 今天在JDF下面封装struts2。
由于JDF的bean 和 struts的action 不是一个东西,当然可以做在一起,但是做在一起会有耦合的问题,而且灵活性大大降低,所以就写了个简单的对象赋值的方法。
 
假设一个UserBean是和表映射的
有一个UserAction 是和JSP表单映射的。
 
这里的字段变量名字都是一样,那么我们可以写一个公用的方法,用于转换两个对象的值的对应。
 
代码如下,Wrap类
 
public class ObjectTransWrap {public static Object wrap(Object actionObj,Class OperatorAction) throws Exception, InstantiationException{Object o = OperatorAction.newInstance();BeanInfobeanInfo = Introspector.getBeanInfo(actionObj.getClass());      PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors();      Method get = null;      Methodset = null;for (int i = 0; i < properties.length; i++) { try{ get = properties.getReadMethod(); set = o.getClass().getMethod( properties.getWriteMethod().getName(), new Class[]{properties.getPropertyType()}); }catch(Throwable a){ continue; } if(set!=null&&get!=null){ set.invoke(o, new Object[]{get.invoke(actionObj, new Object[]{})}); set = null; get = null; }}return o;}
 
下面我们新建两个Bean。
 
UserBean.java
 
public class UserBean{private String name = "";private long age = -1;public long getAge(){return age;}public String getName(){return name;}public void setAge( long age ){this.age = age;}public void setName( String name ){this.name = name;}}
 
UserAction.java
 
public class UserAction{private String name = "";private long age = -1;public long getAge(){return age;}public String getName(){return name;}public void setAge( long age ){this.age = age;}public void setName( String name ){this.name = name;}}
 
main函数
 
public static void main(String[] args) throws InstantiationException, Exception{ UserAction a = new UserAction(); a.setName("名字"); a.setAge(22);   UserBean bean = (UserBean)wrap(a,UserBean.class);   System.out.println("name="+bean.getName());   System.out.println("age="+bean.getAge());}
 
输出结果是:
name=名字
age=22
 
两个bean的值复制成功。但是我感觉我写的上面的代码是在重复的造轮子。JDK里面貌似有这样的方法 
作者keyboardsun ,转载请标明出处
页: [1]
查看完整版本: JAVA bean 复制 数据转化 用于两个对象的filed的值的根据set方法和get方法转换