Gson如何使用TypeToken将JSON转换为bean对象?

Gson如何使用TypeToken将JSON转换为bean对象?,gson,deserialization,Gson,Deserialization,我想知道,在Java是伪泛型的情况下,TypeToken如何实例化一个真正的T对象?比如: 公共类MyList扩展了TypeToken{} 在泛型擦除的情况下,Java如何获取具有泛型的对象——获取ArrayList?Gson不使用类型标记。Gson使用的是类型及其子类型,如ParameterizedType及其getActualTypeArguments方法。有一些方便的静态工厂方法,如TypeToken.getParameterized,可以构造这样的类型,因此您的令牌可以替换为TypeT

我想知道,在Java是伪泛型的情况下,
TypeToken
如何实例化一个真正的
T
对象?比如:

公共类MyList扩展了TypeToken{}

在泛型擦除的情况下,Java如何获取具有泛型的对象——获取
ArrayList

Gson不使用类型标记。Gson使用的是类型及其子类型,如
ParameterizedType
及其
getActualTypeArguments
方法。有一些方便的静态工厂方法,如
TypeToken.getParameterized
,可以构造这样的类型,因此您的令牌可以替换为
TypeToken.getParameterized(ArrayList.class,Integer.class)
--它们都表示相同。
TypeToken
实例只不过是一种编译时检查的方法,用于确保您的
列表
使用
正确参数化,而不是类似
的东西。类型标记分析其基类参数化并从中借用类型,因为此类信息不会被擦除。但是,类型标记需要新类,并导致一些
*.class
文件膨胀(但是,它们在编译时是安全的),而
TypeToken.getParameterized
不需要新类(但编译时不安全,甚至接受明显错误的类型参数)。