java - 如何在不知道形式参数类型的情况下找到构造函数?

标签 java reflection constructor

我想通过反射创建一个类的实例,并且我知道给定的构造函数参数与构造函数兼容。虽然我没有构造函数的形式参数类型。

我知道我可以遍历该类的所有构造函数来执行此操作,但标准 Java 8 API 中是否有更直接的方法?

最佳答案

如果您的参数的运行时类完全匹配构造函数参数的声明类型,您可以构建相应的Class实例数组,然后查找构造函数:

public static void main(String[] args) throws Exception {
    Object[] params = new Object[] {Integer.valueOf(2), "name"};
    Class<?> cls[] = new Class<?>[params.length];
    List<Class<? extends Object>> classes = 
           Arrays.asList(params).stream().map(p -> p.getClass())
                 .collect(Collectors.toList());
    for(int i = 0; i < params.length; i++) {
        cls[i] = classes.get(i);
    }
    Person.class.getConstructor(cls)
    .newInstance(params);
}

这将适用于在此示例中声明的构造函数:

class Person {
    public Person(Integer i, String name) {
        System.out.println("i: " + i + " name: " + name);
    }
}

打印:

i: 2 name: name

关于java - 如何在不知道形式参数类型的情况下找到构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50023500/

相关文章:

JavaScript - instanceof 没有按照我的预期进行

c++ - 没有命名的字段

java - 如何使用 Java 反射调用 Android Dalvik 内部方法?

java - JUnit5-木星 : Composed ( ="meta") annotation does not resolve to annotation definition

c# - 使用方法名称的属性

c++ - 隐式创建的默认构造函数是否负责分配对象内存?

java - 使用 RequestBody 的 POST 请求不起作用

java - Maven 运行错误 "maven-clean-plugin:2.5 or one of its dependencies could not be resolved"

java - 优化 Collat​​z 序列

java - Eclipse 中未解析的泛型