我有两个完全相同的代码片段。 如果您可以使用Class,那么您将使用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);
}
答案 0 :(得分:2)
表示泛型类型T. Java尚未提供方法 代表泛型类型,所以这个类就是。
他们对这句话和随后的信息的意思是:
如果T
是泛型类型(例如java.util.List
),则Class<T>
不包含有关泛型类型参数的足够信息。您可以从Class<List>
找出它代表List
,但无法从Class<List>
中找出它代表特定类型的列表,例如List<String>
。您不能在Java中编写List<String>.class
,它会被编译器拒绝。
TypeToken
确实包含有关泛型类型的泛型类型参数的信息。