/** * 复制对象属性(对象类型必须相同) * * @param orig 资源对象 * @param dest 目标对象 * @param clazz 源对象类 * @param ignoreNull 是否忽略空(true:忽略,false:不忽略) * @return */ public static <T> T copyProperties(T orig, T dest, Class<?> clazz, boolean ignoreNull) { if (orig == null || dest == null) return null; if(!clazz.isAssignableFrom(orig.getClass())) return null; Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { try { field.setAccessible(true); Object value = field.get(orig); if(!java.lang.reflect.Modifier.isFinal(field.getModifiers())){ if(!(ignoreNull && value == null)){ field.set(dest, value); } } field.setAccessible(false); } catch (Exception e) { } } if(clazz.getSuperclass() == Object.class){ return dest; } return copyProperties(orig, dest, clazz.getSuperclass(), ignoreNull); } /** * 复制对象属性(对象类型必须相同) * @param orig 资源对象 * @param dest 目标对象 * @param ignoreNull 是否忽略空(true:忽略,false:不忽略) */ public static <T> T copyProperties(T orig, T dest, boolean ignoreNull) { if (orig == null || dest == null) return null; return copyProperties(orig, dest, orig.getClass(), ignoreNull); } /** * 复制对象 * @param src 资源对象 * @return 新对象 */ @SuppressWarnings("unchecked") public static <T> T clone(T src){ if(src == null){ return null; } T newObject = null; try { newObject = (T) src.getClass().newInstance(); } catch (Exception e) { e.printStackTrace(); } return copyProperties(src, newObject, false); }