java如何将字符串转换为泛型类型对象
我需要使用Jackson流式API反序列化以下文件
{ “key1”: {“value”:{…} },
“key2”: {“value”:{…} },
“key3”: {“value”:{…}},
....
“keyn”: {“value”:{…}}
}
然后使用kvmap将它们放到HashMap kvmap中。put(K,ValueClass); 我的理解是这样做的方式是:我必须使用jp解析K的字符串。getCurrentName(),然后使用:mapper获取ValueClass。readValue(jp,ValueClass.class)。i、 e:
private <K, V> HashMap<K, ValueClass<V>> loadFileStream(File f)
ObjectMapper mapper = new ObjectMapper();
HashMap<K, ValueClass<V>> kvmap = ...
....
current = jp.nextToken();
if (current != JsonToken.START_OBJECT) {
return with error information.
}
while (jp.nextToken() != JsonToken.END_OBJECT) {
String key = jp.getCurrentName();
K = implement a function to convert from key to K;
current = jp.nextToken();
if (current == JsonToken.START_OBJECT) {
ValueClass<V> value = mapper.readValue(jp, ValueClass.class);
kvmap.put(K, value);
}
else {jp.skipChildren();}
}
return kvmap;
}
我的理解是,反序列化密钥的唯一方法是jp。getCurrentName(),因为它未作为json格式包含在{}中,所以我无法使用readValue()等格式获取它。对吗?然后 我的问题是如何实现从字符串键转换为泛型类型K的函数?我认为,如果readValue()可以将字符串转换为相应的泛型类型,理想情况下,我也应该能够将字符串键转换为泛型类型K。但是怎么做呢
# 1 楼答案
通常情况下,您可以使用
ObjectMapper
作为参数传递TypeReference
:这应该是现成的。如果没有,将抛出一个exeption并指出问题所在