Java兩個物件copy屬性值
阿新 • • 發佈:2019-02-06
/**
* copy賦值物件
* @param assignmentModel 賦值的物件
* @param sourceModel 來源物件
*/
public static void copyProperty(Object assignmentModel,Object sourceModel) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
//新的class
Class sourceClass = sourceModel.getClass();
//老的class
Class assignClass = assignmentModel.getClass();
//該類所有的屬性
Field[] sourceFields = sourceClass.getDeclaredFields();
//新的屬性
Field sourceField = null;
//老的屬性
Field assignField = null;
for(Field f : sourceFields){
//類中的屬性名稱
String fieldName = f.getName();
//通過屬性名稱獲取屬性
sourceField = sourceClass.getDeclaredField(fieldName);
//獲取屬性的值時需要設定為 true 則指示反射的物件在使用時應該取消 Java 語言訪問檢查。
//值為 false 則指示反射的物件應該實施 Java 語言訪問檢查。
sourceField.setAccessible(true);
//根據屬性獲取物件上的值
Object newObject = sourceField.get(sourceModel);
//過濾空的屬性或者一些預設值
if (isContinue(newObject)) {
continue;
}
assignField = assignClass.getDeclaredField(fieldName);
assignField.setAccessible(true);
assignField.set(assignmentModel, newObject);
}
}
* copy賦值物件
* @param assignmentModel 賦值的物件
* @param sourceModel 來源物件
*/
public static void copyProperty(Object assignmentModel,Object sourceModel) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
//新的class
Class sourceClass = sourceModel.getClass();
//老的class
Class assignClass = assignmentModel.getClass();
//該類所有的屬性
Field[] sourceFields = sourceClass.getDeclaredFields();
//新的屬性
Field sourceField = null;
//老的屬性
Field assignField = null;
for(Field f : sourceFields){
//類中的屬性名稱
String fieldName = f.getName();
//通過屬性名稱獲取屬性
sourceField = sourceClass.getDeclaredField(fieldName);
//獲取屬性的值時需要設定為 true 則指示反射的物件在使用時應該取消 Java 語言訪問檢查。
//值為 false 則指示反射的物件應該實施 Java 語言訪問檢查。
sourceField.setAccessible(true);
//根據屬性獲取物件上的值
Object newObject = sourceField.get(sourceModel);
//過濾空的屬性或者一些預設值
if (isContinue(newObject)) {
continue;
}
assignField = assignClass.getDeclaredField(fieldName);
assignField.setAccessible(true);
assignField.set(assignmentModel, newObject);
}
}
* 是否跳出這次迴圈
* @param object
* @return
*/
private static boolean isContinue(Object object){
if (object == null || "".equals(object)) {
return true;
}
String valueStr = object.toString();
if ("0".equals(valueStr) || "0.0".equals(valueStr)) {
return true;
}
return false;
}