Java反射调用具有基本类型参数的构造函数

15 浏览
0 Comments

Java反射调用具有基本类型参数的构造函数

在我的测试框架中有一个方法,根据传入的参数创建一个类的实例:

public void test(Object... constructorArgs) throws Exception {
    Constructor 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.(java.lang.String, java.lang.Integer, java.lang.Integer)

原始的int类型会自动装箱为对象版本,但是我该如何将它们还原以便调用构造函数呢?

0