栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在运行时根据通用类型定义和运行时类型参数构建Java类型对象?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在运行时根据通用类型定义和运行时类型参数构建Java类型对象?

我想我明白你的问题。您想要序列化一个

Foo<T>
,并且
T
在运行时具有class对象(但在编译时不是固定的)。因此,在Gson中建议的创建匿名子类的解决方案
TypeToken
不起作用,因为这要求
Foo<String>
在编译时对参数化类型(例如)进行硬编码,并且如果使用,则该解决方案不起作用
Foo<T>

但是,让我们看一下

TypeToken
Gson网站上的方法实际完成的工作。您创建一个对象的匿名子类的对象
TypeToken
,然后使用其
getType()
方法请求其类型参数。类的超类是其元数据的一部分,并且包括其超类的通用参数。因此,在运行时,它可以查看自己的继承层次结构,并弄清楚您使用的类型参数是什么
TypeToken
,然后返回
java.lang.reflect.Type
该类型的实例(如果已参数化,它将是一个
ParameterizedType
实例)。一旦获得此
Type
实例,就应该将其作为的第二个参数传递
toGson()

我们需要做的就是找到另一种方法来创建该实例

ParameterizedType
ParameterizedType
是一个接口,但不幸的是,公共Java
API没有提供任何具体的实现方式或任何
ParameterizedType
动态创建方式。
ParameterizedTypeImpl
在私有Sun
API和您可以使用的Gson代码中似乎有一个名为的类(例如,在此处)。您可以简单地复制代码并将其重命名为您自己的类。然后,要创建一个在运行时
Type
表示的对象
Foo<String>
,您可以执行类似
newParameterizedTypeImpl(Foo.class, new Type[]{String.class}, null)
(未测试)的操作



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/595383.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号