2017-08-26 100 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

相關問題