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

巴哈丁·昂格穆斯

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

我知道我可以通过类的所有构造函数来做到这一点,但是在标准 Java 8 API 中有更直接的方法吗?

欧内斯特_k

如果您的参数的运行时类与构造函数参数的声明类型完全匹配,您可以构建相应的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在不知道类型的情况下使用instanceof

如何在不知道哪个较大的情况下找到两个值之间的差异?

如何在golang编译时不知道protobuf3消息类型的情况下解析它?

如何在不知道通用数据结构类型的情况下获得其长度?

如何在不知道键/值类型的情况下测试接口{}是否为映射?

在不知道返回类型的情况下,按其地址调用C ++中的函数

如何在不知道C语言中[变量参数]类型的情况下访问特定参数?

如何在不知道键的类型和值的类型的情况下遍历KeyValuePair的枚举

如何在不知道当前值的情况下向php中的MySQL SET类型添加可能的值

Chilkat在不知道类型的情况下加载SSHKey

如何在不知道异构列表类型的情况下获得它们的各个元素?

如何在不知道键的情况下找到下一个词典?

在不知道函数参数的情况下使用lambda创建std :: function

如何在不知道键的情况下提取对象每个值的返回类型

如何在不知道类型的情况下从泛型函数调用函数?

如何在不知道具体类型的情况下引用变量?

Selenium:如何在不知道其id或name属性的情况下找到网页上的所有图像?

如何在不知道其确切类型的情况下更新DbContext中的实体?

如何在不知道挂载点的情况下知道设备UUID已挂载?

我如何在不知道JavaScript中标签ID的情况下通过javascript函数设置标签文本

如何在不知道类型的情况下将表的所有子项返回到列表?

Apex Set:如何在不知道数据类型的情况下迭代一个集合?

如何在不知道输入类型的情况下创建填充矩阵的方法

在不知道类型的情况下从文件中读取

如何在不知道 C# 中的底层类型的情况下遍历数组

如何在不知道类的情况下从另一个 dll 调用类的函数?

如何在不知道其内容的特定子类型的情况下复制数组的内容?

在 PHP PDO 中,如何在不知道名称的情况下绑定准备好的语句的命名参数?

C++ 在不知道其类型的情况下将数组传递给函数