动态为对象添加属性

hgu*_*ser 6 java reflection

你好:在我们的应用程序中,我们从数据库中检索了一些数据,例如,表有列:id,name,age,address,email。

然后我们会根据客户的要求得到其中一些属性。

如果客户需要 id、姓名,我们将获取 id 姓名,如果客户需要 id、姓名、年龄,我们将获取 id、姓名、年龄。

现在我们要创建一个类来包装这些属性。但是我们并不确切知道需要哪个字段。

String[] requestPro={"name","id"}; //this field is specified by client
Map<String, Object> map=new HashMap<String, Object>();
Entity en=Entity.newInstance();
for(String p:requestPro){
    map.put(p, BeanUtils.getProperty(en, p));
}
Run Code Online (Sandbox Code Playgroud)

这里可以用Class来代替map吗?

Sea*_*oyd 5

如果我理解正确的话,您希望动态地将属性添加到类中,或者更确切地说:添加到类的特定实例中。

前者是可能的,例如在 Groovy 中,每个类都有一个元类对象,您可以在运行时为其分配行为,后者在 JavaScript 中是可能的,您可以为对象的原型和对象本身分配行为。但是这两个版本在 Java 中都是不可能的,因此在 Java 中需要使用 Map 或类似的结构。

  • @HDave 有趣,这个问题的两个最佳答案都说这是不可能完成的。Pascal 的答案仅适用于 CGLib,一个字节码操作库。所以,如果您准备好动态修改类并篡改类加载器,那么您*可以*在 Java 中执行此操作。但几乎没有人这样做,而且这是有原因的。这是很hacky并且容易出错的。Groovy 元类方法更加干净和安全。 (3认同)
  • 您可以在 Java 中执行此操作。请参阅此处:http://stackoverflow.com/questions/2215536​​/java-dynamic-properties (2认同)