首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么TypeLiteral<T> getRawType()方法返回Class<?超级T>而不是Class<T>?

为什么TypeLiteral<T> getRawType()方法返回Class<?超级T>而不是Class<T>?
EN

Stack Overflow用户
提问于 2017-08-26 19:27:53
回答 1查看 207关注 0票数 0

我想使用Guice类型文字的内置注入,因为我需要注入类信息。下面是一个例子:

代码语言:javascript
复制
public class Foo<T> {

    private Class<T> clazz;

    @Inject
    public Foo(TypeLiteral<T> literal) {
        this.clazz = literal.getRawType();
    }
}

它本可以完美地工作,但是getRawType()方法返回Class<? super T>。在内部,clazz变量被用作另一个类的方法的参数。如果我将clazz类型修改为Class<? super T>,我将不得不修改一堆类。

这里最优雅的解决方案是什么?

EN

回答 1

Stack Overflow用户

发布于 2017-08-26 19:40:48

在这种情况下,您可以将原始类型强制转换为Class<T>,尽管您可能最终将其取消选中,如下所示:

代码语言:javascript
复制
@Inject
public Foo(TypeLiteral<T> literal) {
    this.clazz = (Class<T>) literal.getRawType();
}

要回答你的问题,为什么它会这样做,有类似于Why does Guava's TypeToken.getRawType() return Class instead of Class的答案。它有一个非常好的例子作为它的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45894840

复制
相关文章

相似问题

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