У меня была аналогичная проблема с вызовом правого конструктора класса под названием «Параметр», который мог бы принимать несколько базовых типов Java, таких как String, Integer, Boolean, Long и т. д. Учитывая массив объектов, я хочу их преобразовать в массив объектов Parameter, вызывая наиболее специфичный конструктор для каждого объекта во входном массиве. Я также хотел определить конструктор Parameter (Object o), который бы выбрал исключение IllegalArgumentException. Я, конечно, нашел, что этот метод вызывается для каждого объекта в моем массиве.
Решение, которое я использовал, - это поиск конструктора через отражение ...
public Parameter[] convertObjectsToParameters(Object[] objArray) {
Parameter[] paramArray = new Parameter[objArray.length];
int i = 0;
for (Object obj : objArray) {
try {
Constructor<Parameter> cons = Parameter.class.getConstructor(obj.getClass());
paramArray[i++] = cons.newInstance(obj);
} catch (Exception e) {
throw new IllegalArgumentException("This method can't handle objects of type: " + obj.getClass(), e);
}
}
return paramArray;
}
Не требуется уродливого экземпляра, операторов switch или шаблона посетителя! :) [/ Д2]