假设我想从string创建一个Java对象。
Object obj = Class.forName("com.my.object.MyObject").newInstance();
我能够创建MyObject。我的问题是如何从String创建Java内置对象,如Long或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.getConstructor()
调用特定的构造函数,并向其传递适当的参数。要调用new Long(String)
构造函数,例如:
Class.forName("java.lang.Long")
.getConstructor(String.class)
.newInstance("12345");