用Java动态创建类

时间:2010-09-23 17:25:49

标签: java class dynamic

我想基于我的XML配置文件中定义的字段在Java中创建一个类:

例如:如果XML文件包含(语法已被诽谤以便发布):

<property name="agent_host"></property>
<property name="subsystem"></property>

然后在内部它将创建一个类Event,例如客户端可以实例化的Event(String agentHost,String subSystem)。注意:客户端始终知道此类将被称为“事件”,但不知道需要传递多少“强制参数”。

另一方面,如果我有一个XML文件:

<property name="agent_host"></property>

然后它将创建客户端可用于实例化的Event(String eventHost)。

4 个答案:

答案 0 :(得分:2)

是的,您可以使用反射,但我想到的是使用可以添加属性的类。 想象一个具有一个封装的HashMap的类,使用String作为键(对于属性名称)和属性的值,这样您就可以读取XML文件,并且对于evey属性,将属性添加到类中。 对于这一行:

<property name="subsystem" type="String">value123</property>


GenericClass c = new GenericClass();
c.addAttribute("subsystem", new String("value123"));
//and you could implement a get and set methods like this:
public String getAttributeValue(String attributeName)
{
   return internalHashMap.get(attributeName).toString();
}

使用此功能,您还可以实现setAttributeValue 我认为会非常简单

答案 1 :(得分:1)

这不是一个你想要的课,它是数据。为什么不使用hashmap?我真的不喜欢“Bean”样式类 - 它们鼓励编写错误的代码(生成的类中没有地方可以放置实际代码,所以最终都会被外部代码操纵)。

你可以从XML加载一个hashmap并将其注入一个真实的对象 - 这样你就不必担心实际传递一个哈希值了,你传递的是一个真正的对象,它有真正的商业方法和实际类型安全 - 它只是HAPPENS在内部使用hashmap存储数据而不是成员变量。

我做了很多,但是在某些时候你会发现Hibernate会为你做任何你想做的事。

答案 2 :(得分:1)

我认为来自Commons-BeanUtils的DynaBean可能正是您所寻找的。

  

DynaBean是一个Java对象,它支持可以动态修改其名称和数据类型以及值的属性。在可行的最大程度上,BeanUtils包的其他组件将识别这些bean并将它们视为标准JavaBeans,以便检索和设置属性值。

答案 3 :(得分:1)

如果您真的对动态创建类感兴趣,请尝试使用字节代码增强库,例如Apache中的BCEL