gpt4 book ai didi

java - 如何通过反射获取原始包装类构造函数?

转载 作者:搜寻专家 更新时间:2023-11-01 01:49:19 25 4
gpt4 key购买 nike

我正在尝试通过 Java 中的反射创建一个新的原始包装器对象,但我很难获得它们的构造函数。我尝试用 String 类做同样的事情没有问题(作为完整性测试,我可以使用接受 StringBuilder 的构造函数创建一个 String 对象)请看下面的代码:

try {
Constructor<?>[] cons = String.class.getConstructors();
System.out.println(cons + " / " + cons.length);
Constructor<String> con = String.class.getConstructor(StringBuilder.class);
String test = con.newInstance(new StringBuilder("argument for StringBuilder"));
System.out.println(test.getClass().getName() + " : " + test);

Constructor<?>[] consInteger = Integer.TYPE.getConstructors();
System.out.println(consInteger + " / " + consInteger.length);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

输出是:

[Ljava.lang.reflect.Constructor;@7852e922 / 15
java.lang.String : argument for StringBuilder
[Ljava.lang.reflect.Constructor;@4e25154f / 0

因此,当我请求 String 类构造函数时,我得到了一个包含 15 个构造函数的数组。当我要求 Integer 类型构造函数时,我得到一个包含 0 个元素的数组(根本没有构造函数)。

根据文档 Integer 有 2 个构造函数(Integer(int)Integer(String))。

问题是什么?如何使用反射获取 Integer 类型的构造函数?当我尝试使用 Integer.TYPE.getConstructor(String.class) 时,我得到了一个 NoSuchMethodException

最佳答案

Integer.TYPE是“表示原始类型 int 的 Class 实例。” int 没有构造函数。

使用 Integer.class 来引用包装器类。

关于java - 如何通过反射获取原始包装类构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48060527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com