From 674d616d687ce606d2cc7fa77e175820f8f1e559 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B5=B7=E6=9E=97?=
Date: Tue, 1 Feb 2022 22:01:54 +0800
Subject: [PATCH] support all super class fields to set value
---
.../main/java/unit/test/api/ObjectInit.java | 78 ++++++++++---------
1 file changed, 43 insertions(+), 35 deletions(-)
diff --git a/unit-test-api/src/main/java/unit/test/api/ObjectInit.java b/unit-test-api/src/main/java/unit/test/api/ObjectInit.java
index 9ce424e..8944d8c 100644
--- a/unit-test-api/src/main/java/unit/test/api/ObjectInit.java
+++ b/unit-test-api/src/main/java/unit/test/api/ObjectInit.java
@@ -2,14 +2,17 @@
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
-import org.checkerframework.checker.units.qual.K;
import org.springframework.cglib.core.ReflectUtils;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.math.BigDecimal;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
public class ObjectInit {
@@ -44,48 +47,53 @@ public static Map randomMap(Class key, Class value ) {
}
public static T random(Class clz) {
+ if (clz == null) {
+ throw new RuntimeException("type cannot be null");
+ }
if (isPrimitive(clz)) {
return (T) initPrimitiveValue(clz);
}
T obj = (T) ReflectUtils.newInstance(clz);
- Field[] fields = clz.getDeclaredFields();
- for (Field fieldtemp : fields) {
- fieldtemp.setAccessible(true);
- Class fieldClz = fieldtemp.getType();
- //if (Modifier.isFinal(fieldClz.getModifiers())) {
- // continue;
- //}
- try {
- // Init basic type
- if (isPrimitive(fieldClz)) {
- fieldtemp.set(obj, initPrimitiveValue(fieldClz));
- continue;
- }
+ Class> klass = clz;
+ do {
+ Field[] fields = klass.getDeclaredFields();
+ for (Field fieldtemp : fields) {
+ fieldtemp.setAccessible(true);
+ Class> fieldClz = fieldtemp.getType();
+ //if (Modifier.isFinal(fieldClz.getModifiers())) {
+ // continue;
+ //}
+ try {
+ // Init basic type
+ if (isPrimitive(fieldClz)) {
+ fieldtemp.set(obj, initPrimitiveValue(fieldClz));
+ continue;
+ }
- // Init javabean
- if (!isJavaClass(fieldClz)) {
- fieldtemp.set(obj, random(fieldClz));
- continue;
- }
+ // Init javabean
+ if (!isJavaClass(fieldClz)) {
+ fieldtemp.set(obj, random(fieldClz));
+ continue;
+ }
- Type genericType = fieldtemp.getGenericType();
- if (genericType == null) {
- continue;
- }
- // 如果是泛型参数的类型
- if (genericType instanceof ParameterizedType
+ Type genericType = fieldtemp.getGenericType();
+ if (genericType == null) {
+ continue;
+ }
+ // 如果是泛型参数的类型
+ if (genericType instanceof ParameterizedType
&& fieldClz.equals(List.class)) {
- ParameterizedType pt = (ParameterizedType) genericType;
- //得到泛型里的class类型对象
- Class> accountPrincipalApproveClazz = (Class>) pt.getActualTypeArguments()[0];
- Object random = random(accountPrincipalApproveClazz);
- fieldtemp.set(obj, Lists.newArrayList(random));
- continue;
+ ParameterizedType pt = (ParameterizedType) genericType;
+ //得到泛型里的class类型对象
+ Class> accountPrincipalApproveClazz = (Class>) pt.getActualTypeArguments()[0];
+ Object random = random(accountPrincipalApproveClazz);
+ fieldtemp.set(obj, Lists.newArrayList(random));
+ }
+ } catch (Exception e) {
+ // ignored
}
-
- } catch (Exception e) {
}
- }
+ } while ((klass = klass.getSuperclass()) != null);
try {
System.out.println(clz.getSimpleName() + ":");
JSONFormatUtil.printJson(JSON.toJSONString(obj));