gpt4 book ai didi

java - Guice:为什么 TypeLiteral getRawType() 方法返回 Class<? super T> 而不是 Class

转载 作者:行者123 更新时间:2023-12-02 12:19:30 25 4
gpt4 key购买 nike

我想使用 Guice 类型文字内置注入(inject),因为我需要注入(inject)类信息。请参阅下面的示例:

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>我将不得不返工一些类(class)。

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

最佳答案

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

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

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

关于java - Guice:为什么 TypeLiteral<T> getRawType() 方法返回 Class<? super T> 而不是 Class<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45894840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com