如何从自定义对象获取参数的映射

时间:2014-06-02 11:57:27

标签: java

我上课了一些变数。

如何创建map,其中key是变量的名称,value是该变量的值?

所以我想创建:

来自自定义对象的

Map<String, String>

我创造了这样的东西:

protected Map<String, String> getObjectParams(Object object) throws Exception {
        Map<String, String> result = new HashMap<>();


        for (String field : (Iterable<String>) BeanUtils.describe(object).keySet()) {
            Object value = PropertyUtils.getProperty(object, field);
            if ((value != null) && (!"CLASS".equalsIgnoreCase(field)) {                     
                result.put(field, value.toString());
            }
        }

        return result;
}

但这仅在类包含基本对象及其包装的等效项时才有效。但是当有另一个生成toString的自定义对象时,那将是我不想要的值。那么我应该如何重写这个例子呢?

更新:

public Class MyCustomClass1 {


  MyCustomClass2 customClass2;
}

public Class MyCustomClass2 {

  String a;
  String b;
}

然后map应包含值MyCustomClass2A和MyCustomClass2B及其值或类似的东西

2 个答案:

答案 0 :(得分:0)

您必须在自定义类中重载toString()方法才能获得所需的值。类似的东西:

public Class MyCustomClass1 {
  MyCustomClass2 customClass2;
  public String toString(){
      return customClass2.toString();
  }
}

public Class MyCustomClass2 {

  String a;
  String b;
  public String toString(){
          return a  + " " + b;
      }
}

这只是一个例子,根据需要更改为String()。

或使用此how-to-get-the-list-of-all-attributes-of-a-java-object

答案 1 :(得分:0)

将返回类型更新为Map或Map 并使用递归来填充子对象。