用Java动态创建类

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

例如:如果XML文件包含(语法已被恶意发布):

  

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

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

  

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

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

 value123 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,我觉得这很简单

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

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

我做了很多,但在某些时候你意识到Hibernate会为你做你想做的一切。

我认为来自Commons-BeanUtils的DynaBean可能就是你想要的。

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

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