从哈希映射设置对象字段

2022-09-02 09:34:19

是否有可以执行以下操作的库?

给定一个对象和一个哈希映射,它枚举哈希映射的键,并在对象中查找这些键的 setter 并设置关联的值。看起来像这样:

public Object setData(Object object, HashMap<String, Object> fields) {
   for (Entry<String, Object> entry : fields.entrySet()) {
      Method m = object.getClass().getMethod("set" + entry.getKey(), entry.getValue().getClass());
      if (m != null) {
         m.invoke(object, entry.getValue());
      }
   }
   return object;
}

乍一看,这项任务看起来很简单,但我希望有人已经处理了一些细微差别。如您所知,重新发明轮子(好轮子)是一种糟糕的方法。


答案 1

看看Apache Commons BeanUtils

org.apache.commons.beanutils.BeanUtils.populate(Object bean, Map properties)

Javadoc:
基于指定的名称/值对填充指定 Bean 的 JavaBeans 属性。此方法使用 Java 反射 API 来标识相应的“属性 setter”方法名称,并处理 String、布尔值、int、long、float 和 double 类型的 setter 参数。


答案 2

最好使用 BeanUtils 类:

public Object setData(Object object, HashMap<String, Object> fields) {
   for(Entry<String, Object> entry : fields.entrySet()) {
      BeanUtils.setProperty(object, entry.getKey(), entry.getValue());
   }
   return object;
}