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

如何从字符串创建Java内置对象,java,reflection,Java,Reflection,假设我想从字符串创建一个Java对象 Object obj = Class.forName("com.my.object.MyObject").newInstance(); 我能够创建MyObject。我的问题是如何创建Java内置对象,如Long或String from String。我需要这样做,因为我只能知道文本格式的运行时对象的类型 我这样做了,但没有成功 Object obj = Class.forName("java.lang.Long").newInstance(); java

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

Object obj = Class.forName("com.my.object.MyObject").newInstance();
我能够创建MyObject。我的问题是如何创建Java内置对象,如Long或String from String。我需要这样做,因为我只能知道文本格式的运行时对象的类型

我这样做了,但没有成功

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

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

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

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

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

顺便说一句:尽管大多数人都能很明显地回答这个问题,为什么你的第二个代码示例不起作用,但你应该避免只说“这不起作用”。给我们堆栈跟踪和错误消息。最好查看错误消息,看看它是否有助于您解决错误。(好的,本例中的错误毫无用处,但仍然如此。)感谢您的评论。下次我将添加更详细的错误消息。