编程语言
首页 > 编程语言> > Java泛型方法:超级不能用?

Java泛型方法:超级不能用?

作者:互联网

所以我有这个方法:

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扩展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,这没有多大意义.

标签:bounded-wildcard,java,generics
来源: https://codeday.me/bug/20190927/1823356.html