具有原始类型的 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 的快捷方式。不仅是类,甚至对于原始类型,您都可以在 Java 中说 type.class

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

相关文章:

java - DFS 未正确执行

c# - 根据具有属性的属性复制派生类的实例

c# - 通过 C# 中的反射访问 ICollection<SomeInnerClass> 的内部类型

java - 使用反射设置私有(private)静态最终字段

java - 在 JPanel 中将 JLabel 居中

java - 在午夜时间用 Java 获取今天的日期

java - 如何在 Selenium 中为我的网站发送 key

Java - 在这种情况下如何正确规避非法访问异常

java - 计算出 Google App 引擎实体的属性数据类型

java - 自定义 jackson 解码行为