2014-09-25 84 views
2

我想達到的效果是通過下面的例子描述:是否有可能創建編譯時檢查參數化泛型類型?

public <T extends Collection> T<String> mainSolution(T<String> words) 
{ 
    return Collections2.transform(words, w -> w.length() + w.toUpperCase()); 
} 
+2

不,Java沒有像這樣更高級的泛型。你不能用Java類型系統來表達它。 – 2014-09-25 21:52:51

+0

我想你的意思是'>',而不是原始類型''。 – gparyani 2014-09-25 22:21:39

+0

它有什麼不同嗎?由於不支持更高版本的泛型,因此類型參數將被擦除。 – 2014-09-25 22:34:07

回答

0

我想你的意思是,你要的StringCollection(或子類)傳遞給它做了一個方法轉化並在轉化後返回收集。由此產生的集合與傳入的集合類型相同。

如果是這種情況,那麼您幾乎就是在那裏,只是偶然發現了一些語法。

下面是代碼:

public <T extends Collection<String>> T mainSolutions(T words) 
    { 
     return (T) Collections2.transform(words, w -> w.length() + w.toUpperCase()); 
    } 

<...>你有泛型類型參數,然後按照T是方法的返回類型,顯然它使用相同類型T的1個參數的尖括號內。

相關問題