1. 程式人生 > >Java兩個物件copy屬性值

Java兩個物件copy屬性值

/**
* 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;
   }