Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过反射获得原始包装类构造函数?_Java - Fatal编程技术网

Java 如何通过反射获得原始包装类构造函数?

Java 如何通过反射获得原始包装类构造函数?,java,Java,我试图通过Java中的反射创建一个新的原始包装器对象,我很难获得它们的构造函数。我尝试对一个String类做同样的事情,但没有出现问题(作为一个健全性测试,我可以使用接受StringBuilder的构造函数创建一个String对象),请参见下面的代码: try { Constructor<?>[] cons = String.class.getConstructors(); System.out.println(cons + " / " + cons.length);

我试图通过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();
}
因此,当我请求字符串类构造函数时,我得到了一个由15个构造函数组成的数组。当我请求整数类型构造函数时,我得到一个0元素的数组(根本没有构造函数)

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

有什么问题?如何使用反射获取整数类型的构造函数?当我尝试使用
Integer.TYPE.getConstructor(String.class)
时,我得到一个
NoSuchMethodException
是“表示基元类型的类实例
int
int
没有构造函数


使用
Integer.class
引用包装器类,包装器类确实如此。

您需要
Integer.class.getConstructors()
。Integer.TYPE==int.class


但是,您可能更喜欢Integer.valueOf。用于缓存整数。

尝试使用
getDeclaredConstructors
而不是
getConstructors
,您可能不需要构造函数。
valueOf
方法更适合您的任务。使用Integer.class,而不是Integer.TYPE.class(请参见Joop的解释),我试图在一个泛型类(T extends Number)中实现这一点,该泛型类根据类的用户想要得到的内容将结果作为适当的类型返回(用户将所需的返回类型作为类参数传递给方法)。不幸的是,Number没有“valueOf”方法-它们是由子类(Integer、Float…等)定义的
Number
是抽象的-并且每个
t扩展Number
都有一个
valueOf
方法。即使是
字符
布尔值
(不是数字)也有一个。也许你误解了我。您必须实现一个工厂方法(正如您已经实现的那样),但是您可以调用
valueOf
factory方法,而不是调用构造函数。您的意思是:
try{method m=type.getMethod(“valueOf”,String.class);output=(T)m.invoke(null,String.valueOf(input));}catch(异常e){e.printStackTrace();}
我说得对吗?我以为你的问题是创建一个
整型
整型
整型
?而不是用整型值调用整型构造函数,你可以用反射在同一个整型值上调用Integer.valueOf。这更简单,因为你只需要原始值,包装器可以一般地派生。
[Ljava.lang.reflect.Constructor;@7852e922 / 15
java.lang.String : argument for StringBuilder
[Ljava.lang.reflect.Constructor;@4e25154f / 0