我想基于我的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)。
答案 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可能正是您所寻找的。 p>
DynaBean是一个Java对象,它支持可以动态修改其名称和数据类型以及值的属性。在可行的最大程度上,BeanUtils包的其他组件将识别这些bean并将它们视为标准JavaBeans,以便检索和设置属性值。
答案 3 :(得分:1)
如果您真的对动态创建类感兴趣,请尝试使用字节代码增强库,例如Apache中的BCEL。