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

前端之家收集整理的这篇文章主要介绍了如何在运行时从通用类型定义和运行时类型参数构建Java类型的对象?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设通用类型声明( Java)
class Foo<T> {
    public T bar;
}

在运行时,我如何实例化一个Type对象,该对象表示通过特定类型T参数化的Foo(也仅在运行时才知道)?

解决方法

我想我明白你的问题.你想序列化一个Foo&T,你在运行时有T的类对象(但在编译时它不是固定的).因此,Gson创建一个TypeToken的匿名子类的建议解决方案不起作用,因为这需要参数化类型(例如Foo< String>)在编译时进行硬编码,如果您使用像Foo< ; T&GT ;. 但是,我们来看看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)(未经测试)
原文链接:https://www.f2er.com/java/122932.html

猜你在找的Java相关文章