【发布时间】:2015-01-27 19:25:24
【问题描述】:
我有两种几乎相同的方法,都读取序列化为 JSON 的地图。这些是每个键具有多个值的映射,因此我将映射转换为 guava Multimap。我正在使用Gson 对这些映射进行序列化和反序列化。代码的相关部分如下:
Gson gson = new GsonBuilder().enableComplexMapKeySerialization()
.setPrettyPrinting()
.create();
现在,几乎相同的反序列化方法是:
private static Multimap<String, FirstClass> readFirstClassMMap(Path jsonFile, Type mapType) throws IOException {
Map<String, Set<FirstClass>> map = GSON.fromJson(Files.newBufferedReader(jsonFile), mapType);
Multimap<String, FirstClass> mmap = HashMultimap.create();
for (String key : map.keySet())
mmap.putAll(key, map.get(key));
return mmap;
}
private static Multimap<String, SecondClass> readSecondClassMMap(Path jsonFile, Type mapType) throws IOException {
Map<String, Set<SecondClass>> map = GSON.fromJson(Files.newBufferedReader(jsonFile), mapType);
Multimap<String, FirstClass> mmap = HashMultimap.create();
for (String key : map.keySet())
mmap.putAll(key, map.get(key));
return mmap;
}
第二个参数 mapType 在调用这些方法之前创建,如下所示:
Type maptype = new TypeToken<Map<String, Set<FirstClass>>>() {}.getType();
我想为我拥有的每个自定义类使用一个方法而不是一个新方法。但是在这里,当我尝试使用反射来确定值是FirstClass 还是SecondClass 时,我真的很困惑。
自定义类(FirstClass 和 SecondClass)没有任何关系。
在这种情况下是否可以使用单一的反序列化方法?如果是,我应该如何进行?
【问题讨论】:
-
我认为您发布的代码中可能有一些拼写错误,您可能应该验证它是否可以编译,以便我们可以尝试一下。
-
想到 Java 泛型
标签: java json serialization gson guava