Gson如何使用TypeToken将JSON转换为bean对象?
我想知道,在Java是伪泛型的情况下,Gson如何使用TypeToken将JSON转换为bean对象?,gson,deserialization,Gson,Deserialization,我想知道,在Java是伪泛型的情况下,TypeToken如何实例化一个真正的T对象?比如: 公共类MyList扩展了TypeToken{} 在泛型擦除的情况下,Java如何获取具有泛型的对象——获取ArrayList?Gson不使用类型标记。Gson使用的是类型及其子类型,如ParameterizedType及其getActualTypeArguments方法。有一些方便的静态工厂方法,如TypeToken.getParameterized,可以构造这样的类型,因此您的令牌可以替换为TypeT
TypeToken
如何实例化一个真正的T
对象?比如:
公共类MyList扩展了TypeToken{}
在泛型擦除的情况下,Java如何获取具有泛型的对象——获取
ArrayList
?Gson不使用类型标记。Gson使用的是类型及其子类型,如ParameterizedType
及其getActualTypeArguments
方法。有一些方便的静态工厂方法,如TypeToken.getParameterized
,可以构造这样的类型,因此您的令牌可以替换为TypeToken.getParameterized(ArrayList.class,Integer.class)
--它们都表示相同。TypeToken
实例只不过是一种编译时检查的方法,用于确保您的列表
使用
正确参数化,而不是类似
的东西。类型标记分析其基类参数化并从中借用类型,因为此类信息不会被擦除。但是,类型标记需要新类,并导致一些*.class
文件膨胀(但是,它们在编译时是安全的),而TypeToken.getParameterized
不需要新类(但编译时不安全,甚至接受明显错误的类型参数)。