我可以返回Class<Collection<G>>
,其中G是通用的?如何用G集合返回類,其中G是泛型?
public Class<Collection<G>> getType() {
return (Class<Collection<G>>)Collection.class; // This is wrong
}
我可以返回Class<Collection<G>>
,其中G是通用的?如何用G集合返回類,其中G是泛型?
public Class<Collection<G>> getType() {
return (Class<Collection<G>>)Collection.class; // This is wrong
}
你投不工作,由於Collection.class
是一類的原料Collection
(Class<Collection>
),這是不是一個Class<Collection<G>>
父。讓演員開始工作的一個選擇是上傳到Class<?>
,然後下調到Class<Collection<G>>
。這是有效的,因爲你總是可以上傳到一個超類型,然後downcast是一個未檢查的轉換,在這種情況下,永遠不會在運行時拋出異常。
對於泛型部分,您將需要一個泛型方法來聲明泛型類型參數G
。
@SuppressWarnings("unchecked")
public <G> Class<Collection<G>> getType() {
return (Class<Collection<G>>)(Class<?>)Collection.class;
}
或者,爲了避免原始類型,使用'類>'而不是'Class' – user102008
@ user102008好點,那就更好了。更新了答案。 – cyon
這實際上是正確的。因爲泛型是如何工作的,所以在Java中沒有'Collection .class'這樣的東西。 –
TC1
您可以使用超類型令牌:http://gafter.blogspot.sk/2006/12/super-type-tokens.html - 它們可能在您的用例中很有用。 (當你只需要一個泛型類型簽名的引用,而不是一個誠實可靠的'類',因爲那些確實不存在。) – millimoose
嗯,我不明白。 'Class>'沒有意義,因爲G是如何丟失的 –
Jatin