Java,将Class的实例转换为HashMap

新手上路,请多包涵

如果我有这样的课程:

 class MyObject {
    public int myInt;
    public String myString;
}

是否可以在不实现转换代码的情况下将此类的实例转换为 HashMap?

 MyObject obj = new MyObject();
obj.myInt = 1; obj.myString = "string";
HashMap<String, Object> hs = convert(obj);

hs.getInt("myInt"); // returns 1
hs.getString("myString"); // returns "string"

Java是否提供了这种解决方案,或者我需要自己实现 convert

我的班级有 50 多个字段,为每个字段编写转换器并不是一个好主意。

原文由 Mr.D 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 574
2 个回答

您可以使用反射来实现此行为。您可以获得要转换的类的所有字段以映射迭代这些字段并将每个字段的名称作为映射的键。这将导致从字符串到对象的映射。

 Map<String, Object> myObjectAsDict = new HashMap<>();
Field[] allFields = SomeClass.class.getDeclaredFields();
    for (Field field : allFields) {
        Class<?> targetType = field.getType();
        Object objectValue = targetType.newInstance();
        Object value = field.get(objectValue);
        myObjectAsDict.put(field.getName(), value);
    }
}

原文由 PKuhn 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用杰克逊图书馆,这也是可能的

MyObject obj = new MyObject();
obj.myInt = 1;
obj.myString = "1";
ObjectMapper mapObject = new ObjectMapper();
Map < String, Object > mapObj = mapObject.convertValue(obj, Map.class);

原文由 profcalculus 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题