1. 程式人生 > >JAVA物件屬性複製

JAVA物件屬性複製

需求:在不同類之間直接拷貝所有屬性名稱相同的屬性值。

例如:

public class Class1 {
public int i;
public long l;
public String s;
public List<String> ls;

}

public class Class2{
public int i;
public long l;
public String s;
public List<String> ls;

//other members.

}

說明:現在已經有一個Class1的物件c1(所有屬性均已賦值),現在要將這些值一次拷貝到Class2的物件c2中。

一、方法1:自己實現程式碼

http://blog.csdn.net/isea533/article/details/7851167

下面是一個簡單的物件屬性複製方法:

複製的物件必須同時擁有setter和getter方法...只有一個的時候會報異常,都沒有的時候就不復制..

  1. import java.beans.BeanInfo;  
  2. import java.beans.Introspector;  
  3. import java.beans.PropertyDescriptor;  
  4. publicclass CopyUtil{  
  5.     publicstaticvoid Copy(Object source, Object dest)
    throws Exception {  
  6.         //獲取屬性
  7.         BeanInfo sourceBean = Introspector.getBeanInfo(source.getClass(), java.lang.Object.class);  
  8.         PropertyDescriptor[] sourceProperty = sourceBean.getPropertyDescriptors();  
  9.         BeanInfo destBean = Introspector.getBeanInfo(dest.getClass(), java.lang.Object.class
    );  
  10.         PropertyDescriptor[] destProperty = destBean.getPropertyDescriptors();  
  11.         try{  
  12.             for(int i=0;i<sourceProperty.length;i++){  
  13.                 for(int j=0;j<destProperty.length;j++){  
  14.                     if(sourceProperty[i].getName().equals(destProperty[j].getName())){  
  15.                         //呼叫source的getter方法和dest的setter方法
  16.                         destProperty[j].getWriteMethod().invoke(dest, sourceProperty[i].getReadMethod().invoke(source));  
  17.                         break;                    
  18.                     }  
  19.                 }  
  20.             }  
  21.         }catch(Exception e){  
  22.             thrownew Exception("屬性複製失敗:"+e.getMessage());  
  23.         }  
  24.     }  
  25. }  
注:該方法已經驗證可行。但要求相同名稱的屬性的型別一致。

二、方法2:BeanUtils.copyProperties(destObj, srcObj);

注意:

1、該方法要求屬性型別相同。

2、需要import org.apache.commons.beanutils.PropertyUtils;

而不是com.sun.import org.apache.commons.beanutils.PropertyUtils;//該庫中沒有該方法。

三、方法3:PropertyUtils.copyProperties(destObj, srcObj);

注意:

1、該方法對不同型別的屬性進行強制轉換。

2、需要import org.apache.commons.beanutils.PropertyUtils;

而不是com.sun.import org.apache.commons.beanutils.PropertyUtils;//該庫中沒有該方法。

相關推薦

JAVA物件屬性複製

需求:在不同類之間直接拷貝所有屬性名稱相同的屬性值。 例如: public class Class1 {public int i;public long l;public String s;public List<String> ls; } publ

Java物件深度複製和序列化總結

經常會碰到物件複製的問題,這個問題比較基礎,同時與JVM記憶體模型掛鉤。 1. 實現Cloneable介面預設的clone方法是淺拷貝 Java Cloneable介面實際上是個空介面,沒有任何方法,實際的clone()是object的方法,但是是一個protected的方法,因此需

java 物件屬性比較工具類

package com.zxy.product.human.web.log; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import com.google.

Java物件複製三種方式

我們都是愛情的草,在寒冷中死去,在溫暖中重生,四季輪迴,為了愛情不計仇恨。——《我有一杯酒,可以蔚風塵》 1、概述 在實際程式設計過程中,我們常常要遇到這種情況:有一個物件A,在某一時刻A中已經包含了一些有效值,此時可能 會需要一個和A完全相同新

java物件屬性和方法的引用

物件方法的引用通過物件名.方法名引用。如有以下方法: public void work(){} public void work(int h){} 物件名是work,那麼物件方法的引用就是work.w

java物件屬性拷貝,不拷貝空值

/*** 物件拷貝* 資料物件空值不拷貝到目標物件* * @param dataObject* @param toObject* @throws NoSuchMethodException* copy*/   public static void copyBeanNotNu

java實現物件拷貝和屬性複製的使用

java實現物件拷貝和屬性複製的使用   對於某一屬性,即原始物件和目的物件的屬性名稱相同,就可以拷貝原始物件的屬性值到目的物件中。   注意屬性必須新增set,get方法,否則拷貝不成功   基本型別之間如果是屬性的型別不同,BeanUtils會嘗試去強制

java物件拷貝和屬性複製使用

java實現物件拷貝和屬性複製的使用   對於某一屬性,即原始物件和目的物件的屬性名稱相同,就可以拷貝原始物件的屬性值到目的物件中。   注意屬性必須新增set,get方法,否則拷貝不成功   基本型別之間如果是屬性的型別不同,BeanUtils會嘗試去強制型別轉換,然

java物件複製屬性複製工具類

兩個不同型別的物件中有欄位名稱不區分大小寫的情況下一樣,欄位含義一樣,需要組裝到另一個物件中去,然後就寫了一個這種工具類 我的型別比較特殊,老系統和新系統的物件命名大小寫命名不一致,並且欄位相同型別也有不一致的情況,所以自己寫了一個, 不是很完美基本能用。

JAVA物件之間進行屬性複製的方法比較

  大家在日常的java開發中,經常會使用到物件之間屬性的賦值操作,如果兩個物件之間複製的屬性不多的時候,我們一般都會使用java提供的get、set方法進行復制。但是碰到物件的屬性數量特別多的時候(業務程式碼物件動輒幾十上百個屬性),屬性複製手工輸入上百個ge

Java利用反射實現物件之間相同屬性複製

package com.utils; import java.lang.reflect.Method; import java.util.Arrays; import java.util.Collection; import java.util.List; /** *

java 物件String型別屬性排序

方法一:內部類實現comparator介面 程式碼演示 import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; class B{ String name; String da

java 比較兩個物件屬性值變化情況,用於記錄日誌使用

package com.cdc.console.controller; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; public cl

Java - 物件複製,cloneable與序列化複製的區別

當需要對同一個類,生成多個物件時。一般有三種方法:new()、clone()、以及序列化複製 new和clone的區別,簡單的說一下: new的操作為 分配記憶體。程式執行到new操作符時, 首先去看new操作符後面的型別,因為知道了型別,才能知道要分配多大的記憶體空間。分配完記憶體之後,再

java物件動態的新增屬性

、不知道大家有沒有遇到過這樣的需求 ,就java執行的時候 動態給你java物件新增屬性,最近在專案終於到了,想到了反射去實現,但是最終也沒有搞出來。。。哎。。 有的時候 比如你用的是hibernate或者Spring jdbc 來做dao

java使用反射給物件屬性賦值的兩種方法

java反射無所不能,辣麼,怎麼通過反射設定一個屬性的值呢?  主程式: /**  * @author tengqingya  * @create 2017-03-05 15:54  */ public class TestReflectSet { &nb

java物件序列化與複製圖片

下面程式碼包括賦值多個圖片,物件的序列化,目的是將物件狀態存入檔案,再把物件狀態從檔案中讀取。 DataInputStream dis; DataOutputStream dos; FileInputStream fi = null;

JAVA物件jackson序列化json屬性名變成小寫的解決方案

@JsonProperty private String tId; @JsonProperty private String tName; @JsonIgnore public String get

Java 物件按照多個屬性來合併。

private static final String detailId="detailId"; private static final String shelfBinCode="shelfBinCode"; /** * 相同商品+相同貨架相同貨位合併 * @para

Java 集合自定義物件屬性排序

對自定義的物件屬性進行排序,一般是實現Comparable介面或實現Comparator介面 1. 實現Comparable介面 package CollectionKnowledge; import java.util.ArrayList; import java.util.