解决方法
我想我明白你的问题.你想序列化一个Foo&T,你在运行时有T的类对象(但在编译时它不是固定的).因此,Gson创建一个TypeToken的匿名子类的建议解决方案不起作用,因为这需要参数化类型(例如Foo< String>)在编译时进行硬编码,如果您使用像Foo< ; T> ;. 但是,我们来看看Gson站点上的TypeToken方法实际上是如何实现的.您创建一个TypeToken的匿名子类的对象,然后使用其gettype()方法请求其类型参数.类的超类是其元数据的一部分,并且包括其超类的通用参数.因此,在运行时,它可以查看自己的继承层次结构,并找出您用于TypeToken的类型参数,然后返回该类型的java.lang.reflect.Type实例(如果参数化,则为ParameterizedType实例).一旦你得到这个Type实例,你应该把它作为第二个参数传递给toGson(). 我们需要做的就是找到另一种创建ParameterizedType实例的方式. ParameterizedType是一个接口,但不幸的是,公共Java API不提供任何具体的实现,或任何方式动态创建ParameterizedType.似乎有一个名为ParameterizedTypeImpl的类,在私有的Sun API和Gson代码中可以使用(
e.g. here).您可以简单地复制代码并将其重命名为您自己的类.然后,创建一个表示Foo< String>在运行时你可以做一些类似新的ParameterizedTypeImpl(Foo.class,new Type [] {String.class},null)(未经测试)