у меня есть метод в моей тестовой структуре, которая создает экземпляр класса, в зависимости от параметров, переданных в:Java Reflection вызова конструктора с примитивными типами
public void test(Object... constructorArgs) throws Exception {
Constructor<T> con;
if (constructorArgs.length > 0) {
Class<?>[] parameterTypes = new Class<?>[constructorArgs.length];
for (int i = 0; i < constructorArgs.length; i++) {
parameterTypes[i] = constructorArgs[i].getClass();
}
con = clazz.getConstructor(parameterTypes);
} else {
con = clazz.getConstructor();
}
}
Проблема заключается в том, это не работает, если конструктор имеет примитивных типов, а именно:
public Range(String name, int lowerBound, int upperBound) { ... }
.test("a", 1, 3);
Результаты в:
java.lang.NoSuchMethodException: Range.<init>(java.lang.String, java.lang.Integer, java.lang.Integer)
Th e примитивные ints автоматически помещаются в объектные версии, но как мне их вернуть для вызова конструктора?
int.class ярлык для Integer.TYPE, для любого, даже примитивный тип в Java вы можете написать: type.class – iirekm
Предполагается, что это будет принятый ответ. Вы избили Plaudit Design на несколько секунд ;-) Просто отредактирован, чтобы включить комментарий iirekm. –