Во-первых, отображение DOUBLE-to-Double и так далее можно выполнить в enum:
enum ValueType {
DOUBLE(Double.class), // Or Double[].class
BOOLEAN(Boolean.class),
...;
public final Class<?> type;
ValueType(Class<?> type) {
this.type = type;
}
}
Очевидно, код уже слишком специализирован, тогда как на самом деле точный тип не имеет значения. На этом уровне значение может быть просто объектом, и можно иметь Object[]
.
Следовательно, некоторый глубокий рефакторинг был бы идеальным.
ValueType vt = parameter.getType();
Class<?> t = vt.type;
Object array = Array.newInstance(t, countOfParameters);
// Actuallly Double[] or such.
int countOfParameters = parameter.getValueCount();
if (countOfParameters == 1) {
propertiesBuilder.addProperty(parameter.getName(), parameter.getValue(0));
} else if (countOfParameters > 1) {
Object array = Array.newInstance(t, countOfParameters);
Class<?> componentT = array.getClass().getComponentType(); // == t
Object[] values = new Object[countOfParameters];
for (int kj = 0; kj < countOfParameters; kj++) {
Array.set(array, kj, parameter.getValue(kj));
values[kj] = parameter.getValue(kj);
}
propertiesBuilder.addProperty(parameter.getName(), values); // or array
}
Я добавил немного отражающего кода (Array
), который, надеюсь, не нужен.