java 复制对象和复制对象属性
/** * 复制对象属性(对象类型必须相同) * * @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); }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步