Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
项目统一框架
amos-boot-biz
Commits
111c4f8f
Commit
111c4f8f
authored
Feb 22, 2023
by
suhuiguang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.JDK11回复
parent
91ba21e4
Pipeline
#241
passed with stage
in 1 minute 15 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
157 additions
and
152 deletions
+157
-152
DynamicEnumUtil.java
...m/yeejoin/amos/boot/biz/common/utils/DynamicEnumUtil.java
+133
-130
LatentDangerLevelEnum.java
...amos/latentdanger/common/enums/LatentDangerLevelEnum.java
+9
-8
LatentDangerReformTypeEnum.java
...latentdanger/common/enums/LatentDangerReformTypeEnum.java
+7
-7
LatentDangerStateEnum.java
...amos/latentdanger/common/enums/LatentDangerStateEnum.java
+8
-7
No files found.
amos-boot-biz-common/src/main/java/com/yeejoin/amos/boot/biz/common/utils/DynamicEnumUtil.java
View file @
111c4f8f
//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
amos-boot-module/amos-boot-module-api/amos-boot-module-latentdanger-api/src/main/java/com/yeejoin/amos/latentdanger/common/enums/LatentDangerLevelEnum.java
View file @
111c4f8f
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
()
{
...
...
amos-boot-module/amos-boot-module-api/amos-boot-module-latentdanger-api/src/main/java/com/yeejoin/amos/latentdanger/common/enums/LatentDangerReformTypeEnum.java
View file @
111c4f8f
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
;
}
}
}
}
amos-boot-module/amos-boot-module-api/amos-boot-module-latentdanger-api/src/main/java/com/yeejoin/amos/latentdanger/common/enums/LatentDangerStateEnum.java
View file @
111c4f8f
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
;
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment