所以我有这个方法:
protected void collectSelectedItems(ListSelectionModel lsm,
Collection<? super MyItemClass> result) {
for (int i : GUI.getSelectionIndices(lsm))
{
result.add(getItemByDisplayIndex(i));
}
}
我想返回集合而不是使用 void 方法:
protected <T super MyItemClass> Collection<T>
collectSelectedItems(ListSelectionModel lsm, Collection<T> result) {
for (int i : GUI.getSelectionIndices(lsm))
{
result.add(getItemByDisplayIndex(i));
}
return result;
}
为了做这样的事情(MyItemClass extends MyItemBaseClass
):
List<MyItemBaseClass> list =
collectSelectedItems(lsm, new ArrayList<MyItemBaseClass>());
但是我在 super
上遇到语法错误:
Syntax error on token "super", , expected
什么给了?我可以解决这个问题吗?
最佳答案
这是一个解释为什么不允许这样做的链接:
http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ107
它基本上只是说在类型参数中使用 super “不会给你带来任何好处”,因为如果允许这样做,删除可能只是将其删除为 Object
,这没有多大意义。
关于Java 泛型方法 : super can't be used?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8403489/