Java 反射调用具有基元类型的构造函数
2022-08-31 19:41:29
我的测试框架中有一个方法,它根据传入的参数创建类的实例:
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)
原始 ints 被自动装箱到对象版本中,但是我如何将它们取回以调用构造函数?