|
|
@@ -0,0 +1,102 @@
|
|
|
+package com.webflux.launchcommon.utils;
|
|
|
+
|
|
|
+import java.lang.reflect.Constructor;
|
|
|
+import java.lang.reflect.Field;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 复制Record对象
|
|
|
+ * @author lw12420
|
|
|
+ * @date 2024/06/03
|
|
|
+ */
|
|
|
+public class RecordUtils {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 使用反射实现自动复制Record对象的方法
|
|
|
+ * @param originalRecord
|
|
|
+ * @param <T>
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static <T> T copyRecord(T originalRecord) {
|
|
|
+ try {
|
|
|
+ // 获取Record类
|
|
|
+ Class<?> recordClass = originalRecord.getClass();
|
|
|
+
|
|
|
+ // 获取Record类的构造器
|
|
|
+ var constructor = recordClass.getDeclaredConstructor(recordClass);
|
|
|
+
|
|
|
+ // 设置构造器为可访问
|
|
|
+ constructor.setAccessible(true);
|
|
|
+
|
|
|
+ // 调用构造器创建新的Record对象并返回
|
|
|
+ return (T) constructor.newInstance(originalRecord);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 使用反射修改指定字段
|
|
|
+ * @param originalRecord 对象
|
|
|
+ * @param setName 字段名
|
|
|
+ * @param setValue 字段值
|
|
|
+ * @param <T>
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static <T> T setRecordParameter(T originalRecord,String setName,Object setValue) {
|
|
|
+
|
|
|
+ try {
|
|
|
+ Field[] fields = originalRecord.getClass().getDeclaredFields();
|
|
|
+ for (Field field : fields) {
|
|
|
+ field.setAccessible(true);
|
|
|
+ // 如果字段名与需要修改的参数名相同,则修改参数值
|
|
|
+ if (field.getName().equals(setName)) {
|
|
|
+ field.set(originalRecord, setValue);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return originalRecord;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 使用反射批量修改指定字段
|
|
|
+ *
|
|
|
+ * @param originalRecord 对象
|
|
|
+ * @param parameters
|
|
|
+ * @return {@link T}
|
|
|
+ */
|
|
|
+
|
|
|
+ public static <T> T setRecordParameters(T originalRecord, Map<String,Object> parameters) {
|
|
|
+
|
|
|
+ try {
|
|
|
+ Field[] fields = originalRecord.getClass().getDeclaredFields();
|
|
|
+ parameters.forEach((setName,setValue)->{
|
|
|
+ for (Field field : fields) {
|
|
|
+ field.setAccessible(true);
|
|
|
+ // 如果字段名与需要修改的参数名相同,则修改参数值
|
|
|
+ if (field.getName().equals(setName)) {
|
|
|
+ try {
|
|
|
+ field.set(originalRecord, setValue);
|
|
|
+ } catch (IllegalAccessException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return originalRecord;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+}
|