|
@@ -30,7 +30,7 @@ import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
- * @description:
|
|
|
+ * @description: core工具类
|
|
|
* @author: zhoutg
|
|
|
* @time: 2020/7/30 15:18
|
|
|
*/
|
|
@@ -114,7 +114,6 @@ public class CoreUtil {
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -128,7 +127,6 @@ public class CoreUtil {
|
|
|
return setPropertyList(list, "name", "standName", map);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 循环向上转型, 获取对象的 DeclaredField
|
|
|
*
|
|
@@ -138,9 +136,7 @@ public class CoreUtil {
|
|
|
*/
|
|
|
public static Field getDeclaredField(Object object, String fieldName) {
|
|
|
Field field = null;
|
|
|
-
|
|
|
Class<?> clazz = object.getClass();
|
|
|
-
|
|
|
for (; clazz != Object.class; clazz = clazz.getSuperclass()) {
|
|
|
try {
|
|
|
field = clazz.getDeclaredField(fieldName);
|
|
@@ -150,12 +146,11 @@ public class CoreUtil {
|
|
|
//如果这里的异常打印或者往外抛,则就不会执行clazz = clazz.getSuperclass(),最后就不会进入到父类中了
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 直接读取对象的属性值, 忽略 private/protected 修饰符, 也不经过 getter
|
|
|
+ * 获取对象的属性值,直接使用getDeclaredFields()方法只能获取当前类声明的字段,需要递归向上获取
|
|
|
*
|
|
|
* @param object : 子类对象
|
|
|
* @param fieldName : 父类中的属性名
|
|
@@ -165,6 +160,9 @@ public class CoreUtil {
|
|
|
try {
|
|
|
//根据 对象和属性名通过反射 调用上面的方法获取 Field对象
|
|
|
Field field = getDeclaredField(object, fieldName);
|
|
|
+ if (field == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
//抑制Java对其的检查
|
|
|
field.setAccessible(true);
|
|
|
//获取 object 中 field 所代表的属性值
|
|
@@ -186,10 +184,11 @@ public class CoreUtil {
|
|
|
public static void setFieldValue(Object object, String name, String standName, Map<String, String> value) {
|
|
|
//根据 对象和属性名通过反射 调用上面的方法获取 Field对象
|
|
|
Field field = getDeclaredField(object, name);
|
|
|
-
|
|
|
- //抑制Java对其的检查
|
|
|
+ if (field == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //抑制Java对其的检查field.setAccessible(true);
|
|
|
field.setAccessible(true);
|
|
|
-
|
|
|
try {
|
|
|
//将 object 中 field 所代表的值 设置为 value
|
|
|
String key = (String) field.get(object);
|