2013-04-24 68 views
2

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

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

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

我做到了这一点,但没有奏效。

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

顺便说一句:即使它是明显的谁可以回答这个问题,大多数人为什么你的第二个代码示例没有工作,你只应避免说“这个没在SO上工作“。给我们堆栈跟踪和错误消息。最好查看错误消息,看看它是否有助于您解决错误。 – millimoose 2013-04-24 17:33:07

+0

(好的,在这种情况下的错误是非常无用的,但仍然。) – millimoose 2013-04-24 17:45:21

+0

感谢您的意见。下次我会添加更详细的错误消息。 – codereviewanskquestions 2013-04-24 18:07:59

回答

4

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

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

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

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