我有以下问题:
给定Guice类型文本
TypeLiteral<T> template和实现或扩展T的类Class c,构造一个与c等价的类型Type t,并实例化所有类型变量,以便与template兼容。
如果c没有类型变量,这很容易;c是有问题的类型。但是,如果c有类型变量,那么我需要执行以下操作:
c的继承和实现层次结构中找到与原始T类型相对应的类型。template中查找任何类型变量用途及其对应类型Types助手函数从用(2)中的类型实例化的c创建类型。当然,也有错误的情况,而且可能是不完整的。如果找不到所有类型变量的匹配用法,就会失败。可能还有其他的案子。但是,如果我有这样的情况:
class CS<I> implements S<Map<I,Float>> {
// some stuff
}一个类型文本TypeLiteral<S<Map<I,Float>>>,我想得到一个类型,它表示完全实例化的CS,以匹配类型文字。
看起来反射提供了足够的信息来完成这个任务,但是逻辑看起来很复杂而且容易出错。是否存在公开此逻辑的现有库?
发布于 2010-10-15 20:29:35
这个问题是统一问题的一个实例,因此标准统一算法是适用的,并不像我最初想象的那样复杂。此外,这个问题的实例允许一些重要的简化假设,因为其中一个树将不包含任何变量。200行Java之后,我有了一个可行的解决方案。
发布于 2010-10-15 04:48:11
TypeLiteral.getSupertype()应该能做到这一点:
TypeLiteral<?> t = TypeLiteral.get(x).getSupertype(y);https://stackoverflow.com/questions/3936680
复制相似问题