Java 泛型方法 : super can't be used?

标签 java generics bounded-wildcard

所以我有这个方法:

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/

相关文章:

Java泛型,不能使用任何可迭代对象的参数创建构造函数

java - .NET 等效于 Java 有界通配符 (IInterf<?>)?

java - Spring-boot:JUnit 测试 ApplicationContext 加载失败

java - 安全地包装连接池

java - 类型参数 E 隐藏了类型 E。尝试了不同的变体,但仍然无法修复

Java泛型捕获错误 "? super capture#1 of ? super T"

java - 在 Guava 中,为什么在可能使用 "T"的地方只使用 "? super T"?

java - Scala的存在类型和Java通配符的区别?

java - 在运行时设置类路径

java - 如何打开连接到电脑的钱箱