带参数的新对象的字符串

时间:2011-05-17 09:55:36

标签: java reflection

如何从字符串创建对象的新实例?

我想这样做:

Event event = new Event("hello");  
event.setName("nice!");

但只有

String object = "Event";  
String object_variable_name = "event";  
String object_params = "hello";

这可能吗?

3 个答案:

答案 0 :(得分:2)

您可以使用反射API实例化一个类。但是你需要完整的类名,简单的名称(=没有构造函数)是不够的。

Class clazz = Class.forName("com.example.Event");
Constructor constructor = clazz.getConstructor(String.class);
Object instance = constructor.newInstance("hello");

将变量分配给变量名称和类型存储在字符串中的变量是不可能的。实现这一点的通常模式是使用地图:

Map<String, Object> events = new HashMap<String, Object>();
events.put("event", event);

答案 1 :(得分:0)

你可以使用java.lang.Class的getConstructor isnstead。

答案 2 :(得分:0)

以下是获取类实例的方法(因此可以调用构造函数):How to get a Class Object from the Class Name in Java

现在,您可以通过Beans API获取属性name的getter。请参阅此问题:Java Reflection: Instantiate a new object with specified type

或者您可以使用reflectasmreflectionscommons-beanutils让您的生活更加简单