首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Class<T>与reflect.TypeToken的区别

Class<T>与reflect.TypeToken的区别
EN

Stack Overflow用户
提问于 2018-04-23 05:21:52
回答 1查看 478关注 0票数 1

我有两个代码片段,它们做的事情完全一样。如果您可以使用类,那么您将使用什么场景TypeToken?

代码语言:javascript
复制
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);
  }

以及以下代码:

代码语言:javascript
复制
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);
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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确实包含有关泛型类型的泛型类型参数的信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49973870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档