2014-09-25 86 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个参数的尖括号内。

相关问题