可以优化动态对象创建的代码吗?

dus*_*kin 0 java

我有一个接受类参数的方法。我需要为任何类型的类创建此类对象的列表。每个类可能有一个带有不同数量参数的构造函数。

这就是我到目前为止所取得的成果。它有效,但显然它不够通用。这段代码有更通用的代码吗?

public List<Object> convertSeparatedListToJsonList(String pipedStr, String separatorRegex, Class c){

        try {

                Class<?> cCtor = Class.forName(c.getTypeName());

                List<String> valuesList = Stream.of(pipedStr.split(separatorRegex)).map(String::trim).collect(Collectors.toList());
                int valuesNumber = valuesList.size();

                switch (valuesNumber) {
                    case 1 -> {
                        Constructor<?> ctor = cCtor.getConstructor(String.class);
                        return List.of(ctor.newInstance(valuesList.get(0)));
                    }
                    case 2 -> {
                        Constructor<?> ctor = cCtor.getConstructor(String.class, String.class);
                        return List.of(ctor.newInstance(valuesList.get(0), valuesList.get(1)));
                    }
                    case 4 -> {
                        Constructor<?> ctor = cCtor.getConstructor(String.class, String.class, String.class, String.class);
                        return List.of(ctor.newInstance(valuesList.get(0), valuesList.get(1), valuesList.get(2), valuesList.get(3)));
                    }
                    case 5 -> {
                        Constructor<?> ctor = cCtor.getConstructor(String.class, String.class, String.class, String.class, String.class);
                        return List.of(ctor.newInstance(valuesList.get(0), valuesList.get(1), valuesList.get(2), valuesList.get(3), valuesList.get(4)));
                    }
                    default -> {
                        return new ArrayList<>();
                    }
                }
            } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
                log.error(e.getMessage());
                return new ArrayList<>();
            }
}
Run Code Online (Sandbox Code Playgroud)

我的目标:概括所有列表大小的开关部分。

小智 5

getConstructor方法调用已经采用了一组类。与newInstance此相同,您需要做的就是初始化一个valuesNumber由 String.class 填充的大小的数组,然后将您的 valueList 转换为数组。以下是一些有用的链接:

设置数组所有值的最快方法?

在Java中将列表转换为数组