为什么在gson进行序列化时,两个看似相同的哈希图有不同的行为?

时间:2018-08-10 04:18:44

标签: java hashmap gson

输入:

public static void main(String[] args) {

    final String key = "some key";
    final String value = "some value";

    Map<String, String> map1 = new HashMap<String, String>(){{put(key, value);}};
    System.out.println(new Gson().toJson(map1) + " " + map1.get(key));

    Map<String, String> map2 = new HashMap<>();
    map2.put(key, value);
    System.out.println(new Gson().toJson(map2) + " " + map2.get(key));
}

输出:

null some value
{"some key":"some value"} some value

Process finished with exit code 0

1 个答案:

答案 0 :(得分:21)

对于map1,您创建了一个匿名子类。假设包含main()的类称为ExampleClass,则:

System.out.println(map1.getClass().getName())

打印出:

ExampleClass$1

将类打印为map2会产生以下结果:

java.util.HashMap

关于Gson不对其进行序列化的确切原因-Gson使用类名来查找转换器。如果您改为使用以下方式对其进行序列化:

System.out.println(new Gson().toJson(map1, HashMap.class));

...它按预期工作。