Javagenerics方法:超级不能用?

所以我有这个方法:

protected void collectSelectedItems(ListSelectionModel lsm, Collection result) { for (int i : GUI.getSelectionIndices(lsm)) { result.add(getItemByDisplayIndex(i)); } } 

我想返回集合而不是void方法:

 protected  Collection collectSelectedItems(ListSelectionModel lsm, Collection result) { for (int i : GUI.getSelectionIndices(lsm)) { result.add(getItemByDisplayIndex(i)); } return result; } 

MyItemClass extends MyItemBaseClass这样的事情( MyItemClass extends MyItemBaseClass ):

 List list = collectSelectedItems(lsm, new ArrayList()); 

但我在super上遇到语法错误:

令牌“super”的语法错误,预期

是什么赋予了? 我能解决这个问题吗?

这是一个链接,解释了为什么不允许这样做:

http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ107

它基本上只是说在类型参数中使用super“不会给你任何东西”,因为如果允许的话,擦除可能只是将它擦除到Object ,这没有多大意义。

这是两个想法。 第一个只返回一个genericsCollection ,第二个返回实际的result类型:

 public  Collection ver1(Collection src, Collection dst) { dst.addAll(src); return dst; } public , S extends U> T ver2(Collection src, T dst) { dst.addAll(src); return dst; } 

好吧,我没有完全回答我的问题,但这是我的问题的可接受的解决方案:

 protected > T collectSelectedItems(ListSelectionModel lsm, T result) { for (int i : GUI.getSelectionIndices(lsm)) { result.add(getItemByDisplayIndex(i)); } return result; }