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));