首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为给定TypeLiteral的类重构泛型类型信息?

如何为给定TypeLiteral的类重构泛型类型信息?
EN

Stack Overflow用户
提问于 2010-10-14 19:09:33
回答 2查看 304关注 0票数 0

我有以下问题:

给定Guice类型文本TypeLiteral<T> template和实现或扩展T的类Class c,构造一个与c等价的类型Type t,并实例化所有类型变量,以便与template兼容。

如果c没有类型变量,这很容易;c是有问题的类型。但是,如果c有类型变量,那么我需要执行以下操作:

  1. c的继承和实现层次结构中找到与原始T类型相对应的类型。
  2. 遍历类型参数结构,在template中查找任何类型变量用途及其对应类型
  3. 使用Guice Types助手函数从用(2)中的类型实例化的c创建类型。

当然,也有错误的情况,而且可能是不完整的。如果找不到所有类型变量的匹配用法,就会失败。可能还有其他的案子。但是,如果我有这样的情况:

代码语言:javascript
复制
class CS<I> implements S<Map<I,Float>> {
    // some stuff
}

一个类型文本TypeLiteral<S<Map<I,Float>>>,我想得到一个类型,它表示完全实例化的CS,以匹配类型文字。

看起来反射提供了足够的信息来完成这个任务,但是逻辑看起来很复杂而且容易出错。是否存在公开此逻辑的现有库?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-15 20:29:35

这个问题是统一问题的一个实例,因此标准统一算法是适用的,并不像我最初想象的那样复杂。此外,这个问题的实例允许一些重要的简化假设,因为其中一个树将不包含任何变量。200行Java之后,我有了一个可行的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2010-10-15 04:48:11

TypeLiteral.getSupertype()应该能做到这一点:

代码语言:javascript
复制
TypeLiteral<?> t = TypeLiteral.get(x).getSupertype(y);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3936680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档