JAVA对象属性复制
编程过程中,有些时候某些不同的类有相同的字段,可能会遇到同时给他们赋值的情况...
简单的时候,可以写重复的代码...重复太多的时候,就不如给一个赋值完,直接复制给另一个对象..
上面这种情况在数据库的实体类中比较常见...
下面是一个简单的对象属性复制方法:
复制的对象必须同时拥有setter和getter方法...只有一个的时候会报异常,都没有的时候就不复制..
import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; public class CopyUtil{ public static void Copy(Object source, Object dest)throws Exception { //获取属性 BeanInfo sourceBean = Introspector.getBeanInfo(source.getClass(), java.lang.Object.class); PropertyDescriptor[] sourceProperty = sourceBean.getPropertyDescriptors(); BeanInfo destBean = Introspector.getBeanInfo(dest.getClass(), java.lang.Object.class); PropertyDescriptor[] destProperty = destBean.getPropertyDescriptors(); try{ for(int i=0;i<sourceProperty.length;i++){ for(int j=0;j<destProperty.length;j++){ if(sourceProperty[i].getName().equals(destProperty[j].getName())){ //调用source的getter方法和dest的setter方法 destProperty[j].getWriteMethod().invoke(dest, sourceProperty[i].getReadMethod().invoke(source)); break; } } } }catch(Exception e){ throw new Exception("属性复制失败:"+e.getMessage()); } } }
两个测试的简单类O1,O2
public class O1 { private String aac001; private String aac002; private Double ddd001; public String getAac001() { return aac001; } public void setAac001(String aac001) { this.aac001 = aac001; } public String getAac002() { return aac002; } public void setAac002(String aac002) { this.aac002 = aac002; } public Double getDdd001() { return ddd001; } public void setDdd001(Double ddd001) { this.ddd001 = ddd001; } }
public class O2 { ///////////////////////////////////////// private String aac001; private String aac002; private Double ddd001; ///////////////////////////////////////// private String aac003; private String aac004; public String getAac002() { return aac002; } public void setAac002(String aac002) { this.aac002 = aac002; } public String getAac001() { return aac001; } public void setAac001(String aac001) { this.aac001 = aac001; } public String getAac003() { return aac003; } public void setAac003(String aac003) { this.aac003 = aac003; } public String getAac004() { return aac004; } public void setAac004(String aac004) { this.aac004 = aac004; } public Double getDdd001() { return ddd001; } public void setDdd001(Double ddd001) { this.ddd001 = ddd001; } }
public class CopyTest { /** * @param args */ public static void main(String[] args) throws Exception { //创建两个不同的对象,两者部分属性一样 O1 o1 = new O1(); O2 o2 = new O2(); o1.setAac001("00007"); o1.setAac002("国产零零零零七"); o1.setDdd001(Math.PI); //复制 CopyUtil.Copy(o1, o2); //循环输出o1,o2所有属性 System.out.println("-------------o1----------------"); showObjectPropertyValue(o1); System.out.println("-------------o2----------------"); showObjectPropertyValue(o2); } /** * 循环显示所有含有getter的属性值 * @param o * @throws Exception */ public static void showObjectPropertyValue(Object o) throws Exception{ for(PropertyDescriptor property:Introspector.getBeanInfo(o.getClass(), java.lang.Object.class).getPropertyDescriptors()){ System.out.println(property.getReadMethod().invoke(o)); } } }
执行结果:
-------------o1----------------
00007
国产零零零零七
3.141592653589793
-------------o2----------------
00007
国产零零零零七
null
null
3.141592653589793
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: Xcode8中CoreData编译出错的解决方法
- 下一篇: PHP5配置选项