我想使用Guice类型文字的内置注入,因为我需要注入类信息。下面是一个例子:
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>,我将不得不修改一堆类。
这里最优雅的解决方案是什么?
发布于 2017-08-26 19:40:48
在这种情况下,您可以将原始类型强制转换为Class<T>,尽管您可能最终将其取消选中,如下所示:
@Inject
public Foo(TypeLiteral<T> literal) {
this.clazz = (Class<T>) literal.getRawType();
}要回答你的问题,为什么它会这样做,有类似于Why does Guava's TypeToken.getRawType() return Class instead of Class的答案。它有一个非常好的例子作为它的答案。
https://stackoverflow.com/questions/45894840
复制相似问题