2013-09-26 52 views
1

我可以返回Class<Collection<G>>,其中G是通用的?如何用G集合返回類,其中G是泛型?

public Class<Collection<G>> getType() { 
    return (Class<Collection<G>>)Collection.class; // This is wrong 
    } 
+3

這實際上是正確的。因爲泛型是如何工作的,所以在Java中沒有'Collection .class'這樣的東西。 – TC1

+0

您可以使用超類型令牌:http://gafter.blogspot.sk/2006/12/super-type-tokens.html - 它們可能在您的用例中很有用。 (當你只需要一個泛型類型簽名的引用,而不是一個誠實可靠的'類',因爲那些確實不存在。) – millimoose

+0

嗯,我不明白。 'Class >'沒有意義,因爲G是如何丟失的 – Jatin

回答

1

你投不工作,由於Collection.class是一類的原料CollectionClass<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; 
} 
+1

或者,爲了避免原始類型,使用'類'而不是'Class' – user102008

+0

@ user102008好點,那就更好了。更新了答案。 – cyon