2017-08-26 61 views
0

我想使用Guice类型文字内置注入,因为我需要注入类信息。请参见下面的例子:Guice:为什么TypeLiteral <T> getRawType()方法返回类<? super T>而不是类<T>?

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>我将不得不重做一堆类。

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

回答

1

,就可以把原始类型到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>。它有一个很好的例子作为答案。

+0

是的,我知道我可以施放它,这有多安全?为什么这种方法不是返回类而是? –

+0

@IhorM。更新了答案,理想情况下这应该是共享链接的副本。为此投票 – nullpointer

相关问题