Ho un metodo nel mio quadro di prova che crea un'istanza di una classe, a seconda dei parametri passati in:Java Reflection chiamando costruttore con i tipi primitivi
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();
}
}
Il problema è che questo non funziona se il costruttore ha tipi primitivi, come segue:
public Range(String name, int lowerBound, int upperBound) { ... }
.test("a", 1, 3);
risultati in:
java.lang.NoSuchMethodException: Range.<init>(java.lang.String, java.lang.Integer, java.lang.Integer)
Th Gli inte primitivi sono auto-inscatolati nelle versioni degli oggetti, ma come ottenerli per chiamare il costruttore?
int.class è una scorciatoia per Integer.TYPE, per qualsiasi, anche tipo primitivo in Java puoi scrivere: type.class – iirekm
Questa dovrebbe essere una risposta accettata. Hai battuto Plaudit Design di pochi secondi ;-) Modificato per includere il commento di iirekm. –