我想通过反射创建一个类的实例,并且我知道给定的构造函数参数与构造函数兼容。虽然我没有构造函数的形参类型。
我知道我可以通过类的所有构造函数来做到这一点,但是在标准 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句