I have a method which accepts a class parameter. I need to create a list of this class objects for any kind of a class. Each class may have a constructor with various number of parameters.
This is what I managed to get so far. It works, but obviously it is not generic enough. Is there a more generic code for this code?
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<>();
}
}
My goal: to generalize the switch part for all list sizes.