ich eine Methode in meinem Test-Framework, die eine Instanz einer Klasse erstellt, in Abhängigkeit von den übergebenen Parametern in:Java Reflection Aufruf Konstruktor mit primitiven Typen
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();
}
}
Das Problem ist, funktioniert das nicht, wenn der Konstruktor hat primitive Typen wie folgt:
public Range(String name, int lowerBound, int upperBound) { ... }
.test("a", 1, 3);
Ergebnisse in:
java.lang.NoSuchMethodException: Range.<init>(java.lang.String, java.lang.Integer, java.lang.Integer)
Th Die primitiven Ints werden in Objektversionen automatisch eingereiht, aber wie bekomme ich sie zum Aufruf des Konstruktors zurück?
int.class schreiben kann, ist eine Abkürzung für Integer.TYPE, für jede, auch primitiver Typ in Java können Sie schreiben: type.class – iirekm
Das soll eine akzeptierte Antwort sein. Du hast Plaudit Design um ein paar Sekunden besiegt ;-) Gerade bearbeitet, um Iirekms Kommentar hinzuzufügen. –