java 根据类型自动生成对象

该文章介绍了一个Java方法,根据给定类型动态生成对象,包括基本数据类型、数组、列表等,并为它们设置随机值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 根据类型自动生成对象

    public static Object generateObject(Type type) throws Exception {
        Object object = getRandomValue(type);
        if (object != null) {
            return object;
        }

        if (!(type instanceof Class)) {
            return null;
        }

        Class<?> clazz = (Class<?>) type;
        object = clazz.newInstance();
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            Object value = generateObject(field.getGenericType());
            field.set(object, value);
        }
        return object;
    }

    private static Object getRandomValue(Type type) throws Exception {
        Random random = new Random();

        if (type instanceof Class) {
            Class<?> clazz = (Class<?>) type;
            if (clazz == int.class || clazz == Integer.class) {
                return random.nextInt();
            } else if (clazz == long.class || clazz == Long.class) {
                return random.nextLong();
            } else if (clazz == double.class || clazz == Double.class) {
                return random.nextDouble();
            } else if (clazz == float.class || clazz == Float.class) {
                return random.nextFloat();
            } else if (clazz == boolean.class || clazz == Boolean.class) {
                return random.nextBoolean();
            } else if (clazz == char.class || clazz == Character.class) {
                return (char) random.nextInt(128);
            } else if (clazz == String.class) {
                return getRandomString();
            } else if (clazz.isArray()) {
                Class<?> componentType = clazz.getComponentType();
                int length = random.nextInt(5) + 1; // 随机数组长度为1到5
                Object array = Array.newInstance(componentType, length);
                for (int i = 0; i < length; i++) {
                    Object element = generateObject(componentType);
                    Array.set(array, i, element);
                }
                return array;
            }
        } else if (type instanceof ParameterizedType) {
            Type rawType = ((ParameterizedType) type).getRawType();
            if (rawType instanceof Class) {
                Class<?> clazz = (Class<?>) rawType;
                if (List.class.isAssignableFrom(clazz)) {
                    // 随机列表长度为1到5
                    int size = random.nextInt(5) + 1;
                    List<Object> list = new ArrayList<>();
                    for (int i = 0; i < size; i++) {
                        Object element = generateObject(((ParameterizedType) type).getActualTypeArguments()[0]);
                        list.add(element);
                    }
                    return list;
                }
            }
        }
        return null;
    }
    

    private static String getRandomString() {
        Random random = new Random();
        int length = 5 + random.nextInt(10);

        String characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        StringBuilder sb = new StringBuilder(length);

        for (int i = 0; i < length; i++) {
            int index = random.nextInt(characters.length());
            sb.append(characters.charAt(index));
        }

        return sb.toString();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值