我有两个代码片段,它们做的事情完全一样。如果您可以使用类,那么您将使用什么场景TypeToken?
public static <T> List<T> readJsonArray(String filename, Class<T> clazz) throws IOException {
JavaType listType = objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, clazz);
return objectMapper.readValue(loadFile(filename), listType);
}以及以下代码:
public static <T> List<T> readJsonArray(String filename, TypeToken<T> typeToken) throws IOException {
JavaType listType = objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, typeToken.getRawType());
return objectMapper.readValue(loadFile(filename), listType);
}发布于 2018-04-23 05:46:21
在TypeToken中有一个很大的提示。
表示泛型类型T. Java尚未提供表示泛型类型的方法,因此该类提供了。
他们对这句话和随后的资料的意思是:
如果T是泛型类型(例如java.util.List),那么Class<T>就不包含关于泛型类型参数的足够信息。您可以从Class<List>中发现它代表一个List,但是从Class<List>中找不到它代表一个特定类型的列表,比如List<String>。您不能用Java编写List<String>.class,编译器会拒绝它。
TypeToken确实包含有关泛型类型的泛型类型参数的信息。
https://stackoverflow.com/questions/49973870
复制相似问题