将对象转换为地图:Cast 与 ObjectMapper

632*_*324 5 java serialization casting jackson

以下两种转换Object为 的方法有什么区别Map?假设两种方法都可以将 an 转换Object为 a ,哪种方法更好Map?

投掷:

Object o = some object;
Map<String, Object> map = (Map<String, Object>) o;
Run Code Online (Sandbox Code Playgroud)

对象映射器:

Object o = some object;
Map<String, Object> map = new ObjectMapper().readValue((String) o, new TypeReference<Map<String, Object>>() {});
Run Code Online (Sandbox Code Playgroud)

孙兴斌*_*孙兴斌 5

这取决于输入是什么。

  • (Map<String, Object>) o用于强制转换,因此 的运行时类型o必须是Map,否则ClassCastException会抛出:

    Object o = new HashMap<>();
    Map<String, Object> map = (Map<String, Object>) o; // ok
    
    Object o = new ArrayList<>();
    Map<String, Object> map = (Map<String, Object>) o; //ClassCastException
    
    Object o = new String();
    Map<String, Object> map = (Map<String, Object>) o; //ClassCastException
    
    Run Code Online (Sandbox Code Playgroud)
  • ObjectMapper().readValue(String content, JavaType valueType):

    从给定 JSON 内容字符串反序列化 JSON 内容的方法。

    这意味着输入应该是String有效的json格式。例如:

    Object input = "{\"key1\":{},\"key2\":{}}";
    Map<String, Object> map = new ObjectMapper().readValue((String) input, new TypeReference<Map<String, Object>>() {});
    
    System.out.println(map.size()); // 2
    
    Run Code Online (Sandbox Code Playgroud)

  • 这取决于你的“对象”是什么。如果是json格式的String,则需要ObjectMapper。如果它是一个被`Object`引用的`Map`实例,你可以通过`(Map&lt;String, Object&gt;) o`来转换它 (3认同)