我有一个接受类参数的方法。我需要为任何类型的类创建此类对象的列表。每个类可能有一个带有不同数量参数的构造函数。
这就是我到目前为止所取得的成果。它有效,但显然它不够通用。这段代码有更通用的代码吗?
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 转换为数组。以下是一些有用的链接: