Commit 91ba21e4 authored by suhuiguang's avatar suhuiguang

1.TEST

parent 1f73d507
Pipeline #240 passed with stage
in 3 minutes 53 seconds
package com.yeejoin.amos.boot.biz.common.utils; //package com.yeejoin.amos.boot.biz.common.utils;
//
import sun.reflect.ConstructorAccessor; //
import sun.reflect.FieldAccessor; //import java.lang.reflect.AccessibleObject;
import sun.reflect.ReflectionFactory; //import java.lang.reflect.Array;
//import java.lang.reflect.Field;
import java.lang.reflect.AccessibleObject; //import java.lang.reflect.Modifier;
import java.lang.reflect.Array; //import java.util.ArrayList;
import java.lang.reflect.Field; //import java.util.Arrays;
import java.lang.reflect.Modifier; //import java.util.List;
import java.util.ArrayList; //
import java.util.Arrays; ///**
import java.util.List; // * 动态枚举工具类
// *
/** // * @author DELL
* 动态枚举工具类 // */
* //public class DynamicEnumUtil {
* @author DELL // private static ReflectionFactory reflectionFactory = ReflectionFactory.getReflectionFactory();
*/ //
public class DynamicEnumUtil { // private static void setFailsafeFieldValue(Field field, Object target, Object value) throws NoSuchFieldException,
private static ReflectionFactory reflectionFactory = ReflectionFactory.getReflectionFactory(); // IllegalAccessException {
//
private static void setFailsafeFieldValue(Field field, Object target, Object value) throws NoSuchFieldException, // // 反射访问私有变量
IllegalAccessException { // field.setAccessible(true);
//
// 反射访问私有变量 // /**
field.setAccessible(true); // * 接下来,我们将字段实例中的修饰符更改为不再是final,
// * 从而使反射允许我们修改静态final字段。
/** // */
* 接下来,我们将字段实例中的修饰符更改为不再是final, // Field modifiersField = Field.class.getDeclaredField("modifiers");
* 从而使反射允许我们修改静态final字段。 // modifiersField.setAccessible(true);
*/ // int modifiers = modifiersField.getInt(field);
Field modifiersField = Field.class.getDeclaredField("modifiers"); //
modifiersField.setAccessible(true); // // 去掉修饰符int中的最后一位
int modifiers = modifiersField.getInt(field); // modifiers &= ~Modifier.FINAL;
// modifiersField.setInt(field, modifiers);
// 去掉修饰符int中的最后一位 //
modifiers &= ~Modifier.FINAL; // FieldAccessor fa = reflectionFactory.newFieldAccessor(field, false);
modifiersField.setInt(field, modifiers); // fa.set(target, value);
// }
FieldAccessor fa = reflectionFactory.newFieldAccessor(field, false); //
fa.set(target, value); // private static void blankField(Class<?> enumClass, String fieldName) throws NoSuchFieldException,
} // IllegalAccessException {
// for (Field field : Class.class.getDeclaredFields()) {
private static void blankField(Class<?> enumClass, String fieldName) throws NoSuchFieldException, // if (field.getName().contains(fieldName)) {
IllegalAccessException { // AccessibleObject.setAccessible(new Field[]{field}, true);
for (Field field : Class.class.getDeclaredFields()) { // setFailsafeFieldValue(field, enumClass, null);
if (field.getName().contains(fieldName)) { // break;
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");
private static void cleanEnumCache(Class<?> enumClass) throws NoSuchFieldException, IllegalAccessException { // // IBM JDK
// Sun (Oracle?!?) JDK 1.5/6 // blankField(enumClass, "enumConstants");
blankField(enumClass, "enumConstantDirectory"); // }
// IBM JDK //
blankField(enumClass, "enumConstants"); // private static ConstructorAccessor getConstructorAccessor(Class<?> enumClass, Class<?>[] additionalParameterTypes)
} // throws NoSuchMethodException {
// Class<?>[] parameterTypes = new Class[additionalParameterTypes.length + 2];
private static ConstructorAccessor getConstructorAccessor(Class<?> enumClass, Class<?>[] additionalParameterTypes) // parameterTypes[0] = String.class;
throws NoSuchMethodException { // parameterTypes[1] = int.class;
Class<?>[] parameterTypes = new Class[additionalParameterTypes.length + 2]; // System.arraycopy(additionalParameterTypes, 0, parameterTypes, 2, additionalParameterTypes.length);
parameterTypes[0] = String.class; // return reflectionFactory.newConstructorAccessor(enumClass.getDeclaredConstructor(parameterTypes));
parameterTypes[1] = int.class; // }
System.arraycopy(additionalParameterTypes, 0, parameterTypes, 2, additionalParameterTypes.length); //
return reflectionFactory.newConstructorAccessor(enumClass.getDeclaredConstructor(parameterTypes)); // private static Object makeEnum(Class<?> enumClass, String value, int ordinal, Class<?>[] additionalTypes,
} // Object[] additionalValues) throws Exception {
// Object[] params = new Object[additionalValues.length + 2];
private static Object makeEnum(Class<?> enumClass, String value, int ordinal, Class<?>[] additionalTypes, // params[0] = value;
Object[] additionalValues) throws Exception { // params[1] = Integer.valueOf(ordinal);
Object[] params = new Object[additionalValues.length + 2]; // System.arraycopy(additionalValues, 0, params, 2, additionalValues.length);
params[0] = value; // return enumClass.cast(getConstructorAccessor(enumClass, additionalTypes).newInstance(params));
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 <T> // * @param additionalTypes 枚举类型参数类型列表
* @param enumType 要修改的枚举类型 // * @param additionalValues 枚举类型参数值列表
* @param enumName 添加的枚举类型名字 // * @return
* @param additionalTypes 枚举类型参数类型列表 // */
* @param additionalValues 枚举类型参数值列表 // @SuppressWarnings("unchecked")
* @return // public static <T extends Enum<?>> T addEnum(Class<T> enumType, String enumName, Class<?>[] additionalTypes,
*/ // Object[] additionalValues) {
@SuppressWarnings("unchecked") //
public static <T extends Enum<?>> T addEnum(Class<T> enumType, String enumName, Class<?>[] additionalTypes, // // 0. 检查类型
Object[] additionalValues) { // if (!Enum.class.isAssignableFrom(enumType)) {
// throw new RuntimeException("class " + enumType + " is not an instance of Enum");
// 0. 检查类型 // }
if (!Enum.class.isAssignableFrom(enumType)) { //
throw new RuntimeException("class " + enumType + " is not an instance of Enum"); // // 1. 在枚举类中查找“$values”持有者并获取以前的枚举实例
} // Field valuesField = null;
// Field[] fields = enumType.getDeclaredFields();
// 1. 在枚举类中查找“$values”持有者并获取以前的枚举实例 // for (Field field : fields) {
Field valuesField = null; // if (field.getName().contains("$VALUES")) {
Field[] fields = enumType.getDeclaredFields(); // valuesField = field;
for (Field field : fields) { // break;
if (field.getName().contains("$VALUES")) { // }
valuesField = field; // }
break; // AccessibleObject.setAccessible(new Field[]{valuesField}, true);
} //
} // try {
AccessibleObject.setAccessible(new Field[]{valuesField}, true); // // 2. 将他拷贝到数组
// T[] previousValues = (T[]) valuesField.get(enumType);
try { // List<T> values = new ArrayList<T>(Arrays.asList(previousValues));
// 2. 将他拷贝到数组 //
T[] previousValues = (T[]) valuesField.get(enumType); // // 3. 创建新的枚举项
List<T> values = new ArrayList<T>(Arrays.asList(previousValues)); // T newValue = (T) makeEnum(enumType, enumName, values.size(), additionalTypes, additionalValues);
//
// 3. 创建新的枚举项 // // 4. 添加新的枚举项
T newValue = (T) makeEnum(enumType, enumName, values.size(), additionalTypes, additionalValues); // values.add(newValue);
//
// 4. 添加新的枚举项 // // 5. 设定拷贝的数组,到枚举类型
values.add(newValue); // setFailsafeFieldValue(valuesField, null, values.toArray((T[]) Array.newInstance(enumType, 0)));
//
// 5. 设定拷贝的数组,到枚举类型 // // 6. 清楚枚举的缓存
setFailsafeFieldValue(valuesField, null, values.toArray((T[]) Array.newInstance(enumType, 0))); // cleanEnumCache(enumType);
// return newValue;
// 6. 清楚枚举的缓存 // } catch (Exception e) {
cleanEnumCache(enumType); // throw new RuntimeException(e.getMessage(), e);
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;
...@@ -108,13 +106,14 @@ public enum LatentDangerLevelEnum { ...@@ -108,13 +106,14 @@ 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;
...@@ -86,11 +85,12 @@ public enum LatentDangerReformTypeEnum { ...@@ -86,11 +85,12 @@ 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;
...@@ -63,11 +61,12 @@ public enum LatentDangerStateEnum { ...@@ -63,11 +61,12 @@ 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;
} }
} }
...@@ -16,7 +16,6 @@ import org.typroject.tyboot.core.foundation.enumeration.UserType; ...@@ -16,7 +16,6 @@ import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation; import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper; import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel; import org.typroject.tyboot.core.restful.utils.ResponseModel;
import sun.reflect.generics.tree.VoidDescriptor;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
......
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