我有以下问题:如何重建给定TypeLiteral的类的泛型类型信息?
给定一个吉斯类型字面
TypeLiteral<T> template
和执行或延伸T
类Class c
,构造一个类型Type t
这相当于c
与实例化的,以便与template
兼容的所有类型变量。
如果c
没有类型变量,很容易; c
是有问题的类型。但是,如果c
有类型的变量,那么我需要做到以下几点:
- 在
c
的继承,并通过类型参数结构对应的原始类型T
- 走的实现层次查找的类型,在
template
中找到任何类型的变量用法及其对应类型 - 使用Guice
Types
辅助函数创建一个从(2)中找到的类型实例化的c
的类型。
当然,有错误的情况下,它可能不完整。如果找不到所有类型变量的匹配使用,则会失败。也可能有其他情况。但是,如果我有这样的:
class CS<I> implements S<Map<I,Float>> {
// some stuff
}
和类型文本TypeLiteral<S<Map<I,Float>>>
,我想这代表CS
完全实例化,以匹配文字类型的类型。
它看起来像反射提供了足够的信息来实现这一点,但逻辑看起来很复杂和容易出错。是否有一个现有的库显示这个逻辑?
我试过'template.getSupertype(c)',但它抱怨'c'不是'T'的超类型(这是事实,因为它是'T'的子类型)。 – 2010-10-15 16:45:38