我想将一个groovy对象属性复制到另一个
java对象,我知道groovy到groovy是这样的
def copyProperties(source,target) { source.properties.each { key,value -> if (target.hasProperty(key) && !(key in ['class','MetaClass'])) target[key] = value } }
java to java我可以使用apache BeanUtils,但是如何将groovy对象属性复制到java对象属性?
PS:
时髦的对象
class UserInfo { Integer age String userName String password }
java对象
public class UserInfo { private int age; private String userName; private String password; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
解决方法
def copyProperties(source,Object target) { source.properties.each { key,value -> Class<? extends Object> toClass = target.getClass(); try { BeanInfo toBean = Introspector.getBeanInfo(toClass); PropertyDescriptor[] toPd = toBean.getPropertyDescriptors(); for (PropertyDescriptor propertyDescriptor : toPd) { propertyDescriptor.getDisplayName(); if (key.equals( propertyDescriptor.getDisplayName()) && !(key in ['class','MetaClass'])) { if(propertyDescriptor.getWriteMethod() != null) propertyDescriptor.getWriteMethod().invoke(target,value); } } } catch (IntrospectionException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } }
我自己得到了〜