什么是Type&TypeToken?

And*_*oid 14 java android json gson typetoken

我的项目中有以下方法

 public void execute(final int apiId, final ResponseHandler handler, final Type type)
Run Code Online (Sandbox Code Playgroud)

并使用TypeToken确定类型,如下所示

final Type serviceErrorType = new TypeToken<>() {
    }.getType();
Run Code Online (Sandbox Code Playgroud)

我在这里浏览了这个链接,但完全无法理解TypeTypeToken

任何人都可以分享链接或帮助理解这两个概念吗?

azi*_*ian 22

从您提供的链接:

强制客户端创建此类的子类,即使在运行时也可以检索类型信息.

让我们举个例子.

假设您要使用Gson库将JSON解析为Java类.现在,你必须特别告诉Gson:

我想这个JSON被翻译成一个列表用户对象

你怎么能告诉Gson?如果它只是User,你可以告诉User.class.但是不可能这么说List<User>.class

new Gson().fromJson(json, new TypeToken<List<User>>(){}.getType())
Run Code Online (Sandbox Code Playgroud)

但是现在你可以精确地指定Gson应该将它转换成a List of Users.

应引用文档中的解释:

表示泛型类型T.Java还没有提供表示泛型类型的方法,所以这个类就是这样.

有关该主题的更多详细信息,请查看此博客文章.