Java反射调用具有原始类型的构造函数

原文 标签 java reflection

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

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)

原始整数被自动装箱到对象版本中,但是如何将它们取回以调用构造函数?

最佳答案

使用 Integer.TYPE而不是 Integer.class .

根据 Javadocs ,这是“代表原始类型 int 的 Class 实例”。

您也可以使用 int.class .这是Integer.TYPE的快捷方式.不仅是类,甚至对于原始类型,您也可以说 type.class在 java 。

关于Java反射调用具有原始类型的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3925587/

相关文章:

java - 带有focusLost事件的Java多消息对话框

java - 我对每个json负载都有DTO。我通过http发布请求获取有效负载。我得到两个有效载荷,但是如何将它们组合成最终有效载荷

java - 从 GWT 中的属性文件中获取键的值

java - 为什么即使 MethodHandle 没问题,在 invokeExact 上也会得到 WrongMethodTypeException

java - 使用反射实例化类型参数的对象

java - Java编译器是否优化常量变量计算?

java - 什么是NullPointerException,我该如何解决?

java - 使用反射获取内部类数据

reflection - Kotlin 反射获取字段列表

c# - ASP.net UserControl 和 AppDomain TypeResolve