2

假设我想从字符串创建一个 Java 对象。

Object obj = Class.forName("com.my.object.MyObject").newInstance();

我能够创建 MyObject。我的问题是如何从字符串创建 Java 内置对象,例如 Long 或 String。我需要这样做,因为我只能以文本格式知道运行时对象的类型。

我这样做了,但没有奏效。

Object obj = Class.forName("java.lang.Long").newInstance();
4

2 回答 2

11

java.lang.Long没有无参数构造函数,所以你不能这样调用newInstance。相反,您必须使用正确的参数查找构造函数,构建参数数组,然后调用构造函数。

Constructor constr = Class.forName("java.lang.Long").getConstructor(String.class);
Object myLong = constr.invoke("5");
于 2013-04-24T17:29:33.130 回答
4

阅读文档newInstance(),它会告诉你它调用了一个类的无参数构造函数。如果内置(或任何其他)类具有这样的构造函数,您可以同样创建它。否则,您必须使用 调用特定的构造函数Class.getConstructor(),并传递适当的参数。new Long(String)因此,例如调用构造函数:

Class.forName("java.lang.Long")
     .getConstructor(String.class)
     .newInstance("12345");
于 2013-04-24T17:30:36.517 回答