que tengo un método en mi marco de pruebas que crea una instancia de una clase, dependiendo de los parámetros pasados en:Java Reflexión con los tipos primitivos
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();
}
}
El problema es que esto no funciona si el constructor tiene tipos primitivos, de la siguiente manera:
public Range(String name, int lowerBound, int upperBound) { ... }
.test("a", 1, 3);
resultados en:
java.lang.NoSuchMethodException: Range.<init>(java.lang.String, java.lang.Integer, java.lang.Integer)
Th Las entradas primitivas están encasilladas automáticamente en versiones de objeto, pero ¿cómo puedo recuperarlas para llamar al constructor?
int.class es un atajo para Integer.TYPE, para cualquier, incluso tipo primitivo en Java puede escribir: type.class – iirekm
Se supone que es una respuesta aceptada. Ganaste a Plaudit Design por unos segundos ;-) Recién editado para incluir el comentario de iirekm. –