我试图通过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个构造函数的Array。当我要求Integer类型构造函数时,我得到一个0元素的数组(根本没有构造函数)。
根据文档,Integer有2个构造函数(Integer(int)
和Integer(String)
)。
有什么问题?如何使用反射获取Integer类型的构造函数?当我尝试使用Integer.TYPE.getConstructor(String.class)
时,我得到NoSuchMethodException
。
答案 0 :(得分:4)
Integer.TYPE
是“表示基本类型int
的类实例。” int
没有构造函数。
使用Integer.class
来引用包装类,它可以。
答案 1 :(得分:3)
您需要Integer.class.getConstructors()
。 Integer.TYPE == int.class。
但是您可能更喜欢Integer.valueOf。用于缓存整数。