1. 程式人生 > >JAVA物件之間進行屬性複製的方法比較

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

  大家在日常的java開發中,經常會使用到物件之間屬性的賦值操作,如果兩個物件之間複製的屬性不多的時候,我們一般都會使用java提供的get、set方法進行復制。但是碰到物件的屬性數量特別多的時候(業務程式碼物件動輒幾十上百個屬性),屬性複製手工輸入上百個get、set將會特別耗時耗力。
  如何使用一句簡單的程式碼直接複製上百個屬性,這裡介紹幾種常用的方法,以及本人在實際專案中碰到的一個坑。

  1. 使用org.apache.commons.beanutils.BeanUtils.copyProperties(Object
    dest, Object orig); dest目標物件,orig源物件。(這個方法比較坑,耗時嚴重,之後介紹)
  2. 使用org.springframework.beans.BeanUtils.copyProperties(Object source,
    Object target); source源物件,target物件。(注意和apache的是反過來的) 1.
  3. 使用net.sf.cglib.beans.BeanCopier.copy(from, to, null);
    先定義BeanCopier beanCopier =BeanCopier.create(“要轉換的類”, “轉換後的類”, false);   再複製beanCopier.copy(from, to, null);
  4. org.springframework.cglib.beans.BeanCopier.copy(from, to, null);
    先定義BeanCopier beanCopier =BeanCopier.create(“要轉換的類”, “轉換後的類”, false);   再進行復制beanCopier.copy(from, to, null);

      
      本人做了簡單的測試,如下:
      JAVA物件複製對比測試
      可以發現org.apache.commons.beanutils.BeanUtils.copyProperties在屬性多的情況複製效率嚴重低下,本人曾使用這個方法也被坑慘了。
      推薦使用spring的beanUtils或者BeanCopier,使用簡單方便,效率較高,上百行的屬性複製一行搞定,輕鬆愉快。
      本人也是做了簡單的測試,還有其他的坑估計還要進行進一步深入探索。

相關推薦

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物件拷貝和屬性複製使用

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

Java 物件之間相同屬性的賦值

參考文章 1.BeanUtils.copyProperties import org.springframework.beans.BeanUtils; User src = new User(); User dest = new User(); Bean

Java中List集合排序的方法 比較器的使用 根據學生對象數序 語文 英語成績總和進行sort排序

private system.in set swift ringbuf 直觀 turn @override encoding package com.swift; import java.util.ArrayList; import java.util.Collecti

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

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

學習Java之通過物件識別符號可操作物件的哪些屬性方法的點滴體會

再說這個主題的時候,我們先大致看一下我畫的有點不可觀賞的類檔案的關係圖。通過上圖,我們知道一類物件的物件描述檔案類檔案之間是有相互關聯關係的。 所以,對於一個具體物件而言,此物件的屬性和方法就有可能被在不同的物件描述檔案中所描述。例如:當我們使用物件描述檔案要描述花這個物件的時候,對於花的

C#用反射實現兩個類的物件之間相同屬性的值的複製

在進行實體轉換操作的時候如果需要在對兩個實體之間兩個屬性欄位差不多相同的類要進行一個互相的轉換,我們要把a物件的所有欄位的值都複製給b物件,我們只能用b.屬性=a.屬性來寫,如果屬性欄位太多的話,就要寫很多行復制語句,麻煩還容易漏掉一些,這個時候可以利用c#的反射來實現複製。我們可以寫這樣一個利用泛

XStream實現xml和java物件之間的互相轉換(包括對屬性,別名,下劃線_的處理),同理JSON也可以

首先去官網下載響應JAR包 最少需要兩個jar包,一個xstream.jar,一個是xmlpull.jar 首先來看下java物件到xml的轉換 package xml; class PhoneNumber { private int code;

java面向物件之類、屬性方法

雖然學習java這門語言已經一年多了,但自己自我感覺僅僅是停留在語法測層面上,沒有真正理解面向物件的含義,今天拜讀了李運華大神編著的面向物件葵花寶典後,有一點收穫,所以寫下來一起分享 類 不用說專業術語,任何人都能理解,就是同一類 對於生物來說,我、你、豬都是一類 對於植物

java 物件String型別屬性排序

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

jQuery原始碼解析(jQuery物件的例項屬性方法

1、記錄版本號 以及 修正constructor指向 jquery: core_version, constructor: jQuery,   因為jQuery.prototype={ ... } 這種寫法將自動生成的jQuery.prototype.constructor

TypeError Error 1009 無法訪問空物件引用的屬性方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

03Thread物件的其他屬性方法.py

Thread物件的其他屬性或方法 介紹 Thread例項物件的方法 # isAlive(): 返回執行緒是否活動的。 # getName(): 返回執行緒名。 # setName(): 設定執行緒名。 threading模組提供的一些方法: # threading.currentThre

java兩個數進行交換,使用方法不能實現的問題分析

class Test{ public static void main(String[] args){ int a=5; int b=11; swap(a,b); //沒有任何卵用,因為方法結束後,方法內部作出的動作,包括

JSON和JAVA物件之間的轉換小結

    JSON(JAVAScript Object Notation, JS 物件簡譜) 是一種輕量級的資料交換格式。它基於歐洲計算機協會制定的js規範的一個子集,採用完全獨立於程式語言的文字格式來儲存和表示資料。    1.為了便於轉換,需要

java物件序列化與複製圖片

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

AXIS2中OMElement和Java物件之間的轉換 分享

最近在使用AXIS2部署Web Service,關於如果使用axis2部署Web Service的方法不想在這裡多說,網站有很多相關的文章,這裡只想談談AXIOM物件與Java中的物件的轉換方法。 關於AXIOM的介紹,下面這個片段已經說得很明白了: AXIOM AXIs 物件模型 (AXIOM) 是一

【基礎】Java物件引用進行的是值傳遞

回顧: 在程式設計語言中,將引數傳遞分為按值呼叫和按引用呼叫。按值呼叫:表示方法接收的是呼叫者提供的值。而按引用呼叫表示方法接收的是呼叫者提供的變數地址。一個方法可以修改傳遞引用所對應的變數值,而不能修改傳遞值呼叫所對應的變數值。 Java總是採用按值呼叫。方法得到的是所有引數

js物件動態新增屬性方法

1. 動態新增屬性,方法 var object = new Object(); object.name = "name"; object.age = 19; >>>{name: "name", age: 19} object.fun = function(){   console