Commit 111c4f8f authored by suhuiguang's avatar suhuiguang

1.JDK11回复

parent 91ba21e4
Pipeline #241 passed with stage
in 1 minute 15 seconds
//package com.yeejoin.amos.boot.biz.common.utils; package com.yeejoin.amos.boot.biz.common.utils;
//
// import sun.reflect.ConstructorAccessor;
//import java.lang.reflect.AccessibleObject; import sun.reflect.FieldAccessor;
//import java.lang.reflect.Array; import sun.reflect.ReflectionFactory;
//import java.lang.reflect.Field;
//import java.lang.reflect.Modifier; import java.lang.reflect.AccessibleObject;
//import java.util.ArrayList; import java.lang.reflect.Array;
//import java.util.Arrays; import java.lang.reflect.Field;
//import java.util.List; import java.lang.reflect.Modifier;
// import java.util.ArrayList;
///** import java.util.Arrays;
// * 动态枚举工具类 import java.util.List;
// *
// * @author DELL /**
// */ * 动态枚举工具类
//public class DynamicEnumUtil { *
// private static ReflectionFactory reflectionFactory = ReflectionFactory.getReflectionFactory(); * @author DELL
// */
// private static void setFailsafeFieldValue(Field field, Object target, Object value) throws NoSuchFieldException, public class DynamicEnumUtil {
// IllegalAccessException { private static ReflectionFactory reflectionFactory = ReflectionFactory.getReflectionFactory();
//
// // 反射访问私有变量 private static void setFailsafeFieldValue(Field field, Object target, Object value) throws NoSuchFieldException,
// field.setAccessible(true); IllegalAccessException {
//
// /** // 反射访问私有变量
// * 接下来,我们将字段实例中的修饰符更改为不再是final, field.setAccessible(true);
// * 从而使反射允许我们修改静态final字段。
// */ /**
// Field modifiersField = Field.class.getDeclaredField("modifiers"); * 接下来,我们将字段实例中的修饰符更改为不再是final,
// modifiersField.setAccessible(true); * 从而使反射允许我们修改静态final字段。
// int modifiers = modifiersField.getInt(field); */
// Field modifiersField = Field.class.getDeclaredField("modifiers");
// // 去掉修饰符int中的最后一位 modifiersField.setAccessible(true);
// modifiers &= ~Modifier.FINAL; int modifiers = modifiersField.getInt(field);
// modifiersField.setInt(field, modifiers);
// // 去掉修饰符int中的最后一位
// FieldAccessor fa = reflectionFactory.newFieldAccessor(field, false); modifiers &= ~Modifier.FINAL;
// fa.set(target, value); modifiersField.setInt(field, modifiers);
// }
// FieldAccessor fa = reflectionFactory.newFieldAccessor(field, false);
// private static void blankField(Class<?> enumClass, String fieldName) throws NoSuchFieldException, fa.set(target, value);
// IllegalAccessException { }
// for (Field field : Class.class.getDeclaredFields()) {
// if (field.getName().contains(fieldName)) { private static void blankField(Class<?> enumClass, String fieldName) throws NoSuchFieldException,
// AccessibleObject.setAccessible(new Field[]{field}, true); IllegalAccessException {
// setFailsafeFieldValue(field, enumClass, null); for (Field field : Class.class.getDeclaredFields()) {
// break; if (field.getName().contains(fieldName)) {
// } AccessibleObject.setAccessible(new Field[]{field}, true);
// } setFailsafeFieldValue(field, enumClass, null);
// } break;
// }
// private static void cleanEnumCache(Class<?> enumClass) throws NoSuchFieldException, IllegalAccessException { }
// // Sun (Oracle?!?) JDK 1.5/6 }
// blankField(enumClass, "enumConstantDirectory");
// // IBM JDK private static void cleanEnumCache(Class<?> enumClass) throws NoSuchFieldException, IllegalAccessException {
// blankField(enumClass, "enumConstants"); // Sun (Oracle?!?) JDK 1.5/6
// } blankField(enumClass, "enumConstantDirectory");
// // IBM JDK
// private static ConstructorAccessor getConstructorAccessor(Class<?> enumClass, Class<?>[] additionalParameterTypes) blankField(enumClass, "enumConstants");
// throws NoSuchMethodException { }
// Class<?>[] parameterTypes = new Class[additionalParameterTypes.length + 2];
// parameterTypes[0] = String.class; private static ConstructorAccessor getConstructorAccessor(Class<?> enumClass, Class<?>[] additionalParameterTypes)
// parameterTypes[1] = int.class; throws NoSuchMethodException {
// System.arraycopy(additionalParameterTypes, 0, parameterTypes, 2, additionalParameterTypes.length); Class<?>[] parameterTypes = new Class[additionalParameterTypes.length + 2];
// return reflectionFactory.newConstructorAccessor(enumClass.getDeclaredConstructor(parameterTypes)); parameterTypes[0] = String.class;
// } parameterTypes[1] = int.class;
// System.arraycopy(additionalParameterTypes, 0, parameterTypes, 2, additionalParameterTypes.length);
// private static Object makeEnum(Class<?> enumClass, String value, int ordinal, Class<?>[] additionalTypes, return reflectionFactory.newConstructorAccessor(enumClass.getDeclaredConstructor(parameterTypes));
// Object[] additionalValues) throws Exception { }
// Object[] params = new Object[additionalValues.length + 2];
// params[0] = value; private static Object makeEnum(Class<?> enumClass, String value, int ordinal, Class<?>[] additionalTypes,
// params[1] = Integer.valueOf(ordinal); Object[] additionalValues) throws Exception {
// System.arraycopy(additionalValues, 0, params, 2, additionalValues.length); Object[] params = new Object[additionalValues.length + 2];
// return enumClass.cast(getConstructorAccessor(enumClass, additionalTypes).newInstance(params)); params[0] = value;
// } params[1] = Integer.valueOf(ordinal);
// System.arraycopy(additionalValues, 0, params, 2, additionalValues.length);
// /** return enumClass.cast(getConstructorAccessor(enumClass, additionalTypes).newInstance(params));
// * 将枚举实例添加到作为参数提供的枚举类中 }
// *
// * @param <T> /**
// * @param enumType 要修改的枚举类型 * 将枚举实例添加到作为参数提供的枚举类中
// * @param enumName 添加的枚举类型名字 *
// * @param additionalTypes 枚举类型参数类型列表 * @param <T>
// * @param additionalValues 枚举类型参数值列表 * @param enumType 要修改的枚举类型
// * @return * @param enumName 添加的枚举类型名字
// */ * @param additionalTypes 枚举类型参数类型列表
// @SuppressWarnings("unchecked") * @param additionalValues 枚举类型参数值列表
// public static <T extends Enum<?>> T addEnum(Class<T> enumType, String enumName, Class<?>[] additionalTypes, * @return
// Object[] additionalValues) { */
// @SuppressWarnings("unchecked")
// // 0. 检查类型 public static <T extends Enum<?>> T addEnum(Class<T> enumType, String enumName, Class<?>[] additionalTypes,
// if (!Enum.class.isAssignableFrom(enumType)) { Object[] additionalValues) {
// throw new RuntimeException("class " + enumType + " is not an instance of Enum");
// } // 0. 检查类型
// if (!Enum.class.isAssignableFrom(enumType)) {
// // 1. 在枚举类中查找“$values”持有者并获取以前的枚举实例 throw new RuntimeException("class " + enumType + " is not an instance of Enum");
// Field valuesField = null; }
// Field[] fields = enumType.getDeclaredFields();
// for (Field field : fields) { // 1. 在枚举类中查找“$values”持有者并获取以前的枚举实例
// if (field.getName().contains("$VALUES")) { Field valuesField = null;
// valuesField = field; Field[] fields = enumType.getDeclaredFields();
// break; for (Field field : fields) {
// } if (field.getName().contains("$VALUES")) {
// } valuesField = field;
// AccessibleObject.setAccessible(new Field[]{valuesField}, true); break;
// }
// try { }
// // 2. 将他拷贝到数组 AccessibleObject.setAccessible(new Field[]{valuesField}, true);
// T[] previousValues = (T[]) valuesField.get(enumType);
// List<T> values = new ArrayList<T>(Arrays.asList(previousValues)); try {
// // 2. 将他拷贝到数组
// // 3. 创建新的枚举项 T[] previousValues = (T[]) valuesField.get(enumType);
// T newValue = (T) makeEnum(enumType, enumName, values.size(), additionalTypes, additionalValues); List<T> values = new ArrayList<T>(Arrays.asList(previousValues));
//
// // 4. 添加新的枚举项 // 3. 创建新的枚举项
// values.add(newValue); T newValue = (T) makeEnum(enumType, enumName, values.size(), additionalTypes, additionalValues);
//
// // 5. 设定拷贝的数组,到枚举类型 // 4. 添加新的枚举项
// setFailsafeFieldValue(valuesField, null, values.toArray((T[]) Array.newInstance(enumType, 0))); values.add(newValue);
//
// // 6. 清楚枚举的缓存 // 5. 设定拷贝的数组,到枚举类型
// cleanEnumCache(enumType); setFailsafeFieldValue(valuesField, null, values.toArray((T[]) Array.newInstance(enumType, 0)));
// return newValue;
// } catch (Exception e) { // 6. 清楚枚举的缓存
// throw new RuntimeException(e.getMessage(), e); cleanEnumCache(enumType);
// } return newValue;
// } } catch (Exception e) {
//} throw new RuntimeException(e.getMessage(), e);
\ No newline at end of file }
}
}
\ No newline at end of file
package com.yeejoin.amos.latentdanger.common.enums; package com.yeejoin.amos.latentdanger.common.enums;
import com.yeejoin.amos.boot.biz.common.utils.DynamicEnumUtil;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -106,14 +108,13 @@ public enum LatentDangerLevelEnum { ...@@ -106,14 +108,13 @@ public enum LatentDangerLevelEnum {
public static LatentDangerLevelEnum addEnumDynamic(String enumName, String name, String code, public static LatentDangerLevelEnum addEnumDynamic(String enumName, String name, String code,
String riskSourceDangerLevelCode, Integer order) { String riskSourceDangerLevelCode, Integer order) {
// LatentDangerLevelEnum dangerLevelEnum = DynamicEnumUtil.addEnum(LatentDangerLevelEnum.class, enumName, LatentDangerLevelEnum dangerLevelEnum = DynamicEnumUtil.addEnum(LatentDangerLevelEnum.class, enumName,
// new Class[]{String.class, String.class, String.class, Integer.class}, new Object[]{name, code, new Class[]{String.class, String.class, String.class, Integer.class}, new Object[]{name, code,
// riskSourceDangerLevelCode, order}); riskSourceDangerLevelCode, order});
// if (!ValidationUtil.isEmpty(dangerLevelEnum)) { if (!ValidationUtil.isEmpty(dangerLevelEnum)) {
// supervisionDangerLevelEnumMap.put(code, dangerLevelEnum); supervisionDangerLevelEnumMap.put(code, dangerLevelEnum);
// } }
// return dangerLevelEnum; return dangerLevelEnum;
return null;
} }
public String getName() { public String getName() {
......
package com.yeejoin.amos.latentdanger.common.enums; package com.yeejoin.amos.latentdanger.common.enums;
import com.yeejoin.amos.boot.biz.common.utils.DynamicEnumUtil;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil; import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.HashMap; import java.util.HashMap;
...@@ -85,12 +86,11 @@ public enum LatentDangerReformTypeEnum { ...@@ -85,12 +86,11 @@ public enum LatentDangerReformTypeEnum {
} }
public static LatentDangerReformTypeEnum addEnumDynamic(String enumName, String name, String code) { public static LatentDangerReformTypeEnum addEnumDynamic(String enumName, String name, String code) {
// LatentDangerReformTypeEnum dangerReformTypeEnum = DynamicEnumUtil.addEnum(LatentDangerReformTypeEnum.class, enumName, LatentDangerReformTypeEnum dangerReformTypeEnum = DynamicEnumUtil.addEnum(LatentDangerReformTypeEnum.class, enumName,
// new Class[]{String.class, String.class}, new Object[]{name, code}); new Class[]{String.class, String.class}, new Object[]{name, code});
// if (!ValidationUtil.isEmpty(dangerReformTypeEnum)) { if (!ValidationUtil.isEmpty(dangerReformTypeEnum)) {
// supervisionReformTypeEnumMap.put(code, dangerReformTypeEnum); supervisionReformTypeEnumMap.put(code, dangerReformTypeEnum);
// } }
// return dangerReformTypeEnum; return dangerReformTypeEnum;
return null;
} }
} }
package com.yeejoin.amos.latentdanger.common.enums; package com.yeejoin.amos.latentdanger.common.enums;
import com.yeejoin.amos.boot.biz.common.utils.DynamicEnumUtil;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -61,12 +63,11 @@ public enum LatentDangerStateEnum { ...@@ -61,12 +63,11 @@ public enum LatentDangerStateEnum {
} }
public static LatentDangerStateEnum addEnumDynamic(String enumName, String name, String code) { public static LatentDangerStateEnum addEnumDynamic(String enumName, String name, String code) {
// LatentDangerStateEnum dangerStateEnum = DynamicEnumUtil.addEnum(LatentDangerStateEnum.class, enumName, LatentDangerStateEnum dangerStateEnum = DynamicEnumUtil.addEnum(LatentDangerStateEnum.class, enumName,
// new Class[]{String.class, String.class}, new Object[]{name, code}); new Class[]{String.class, String.class}, new Object[]{name, code});
// if (!ValidationUtil.isEmpty(dangerStateEnum)) { if (!ValidationUtil.isEmpty(dangerStateEnum)) {
// enumMap.put(code, dangerStateEnum); enumMap.put(code, dangerStateEnum);
// } }
// return dangerStateEnum; return dangerStateEnum;
return null;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment