如何从字符串创建Java内置对象

时间:2013-04-24 17:23:06

标签: java reflection

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

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

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

我这样做但没有奏效。

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

2 个答案:

答案 0 :(得分:11)

java.lang.Long没有无参数构造函数,因此您无法像这样调用newInstance。相反,您必须使用正确的参数查找构造函数,构建参数数组,然后调用构造函数。

Constructor constr = Class.forName("java.lang.Long").getConstructor(String.class);
Object myLong = constr.invoke("5");

答案 1 :(得分:4)

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

Class.forName("java.lang.Long")
     .getConstructor(String.class)
     .newInstance("12345");