我想通过反射创建一个类的实例,并且我知道给定的构造函数参数与构造函数兼容。虽然我没有构造函数的形式参数类型。
我知道我可以遍历该类的所有构造函数来执行此操作,但标准 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/