使用Reflection:java.reflection.Constructor.newInstance()

Wil*_*lco 5 java reflection

我正在尝试使用Constructor.newInstance()方法实例化一个类,但是在为构造函数提供参数时遇到了麻烦.问题是,构造函数参数可以作为String []数组使用,我必须将其元素转换为相应的类型.这适用于对象,但是如果某些参数是基本类型呢?

这是一个简化的例子(在我点击基本类型之前似乎工作正常):

Class fooClass = Class.forName("Foo");
Constructor[] fooCtrs = fooClass.getConstructors();
Class[] types = fooCtrs[0].getParameterTypes();
Object[] params = new Object[types.length];

for(int i = 0; i < types.length; i++) {
    params[i] = types[i].cast(args[i]);  // Assume args is of type String[]
}
Run Code Online (Sandbox Code Playgroud)

一旦我遇到一个int或者某个东西,我就会得到一个ClassCastException.我做错了吗?我是否需要手动包装我遇到的任何基元,或者有内置的方法吗?

mrk*_*mrk 4

正确,您需要在包装器中添加基元。

阅读Constructor.newInstance()文档中有关基元的信息

参数: initargs - 作为参数传递给构造函数调用的对象数组;原始类型的值被包装在适当类型的包装对象中(例如,Float 中的 float)