【问题标题】:Multiple extends in generic functions java泛型函数java中的多个扩展
【发布时间】:2016-10-14 06:44:09
【问题描述】:

我想实现一个简单的排序函数,它对列表进行排序并返回排序后的列表(非常简单!)。所以我写了这个

public static <T extends List<? extends Comparable>> T sort(T objects)
{
    Collections.sort(objects);
    return objects;
}

问题是当我尝试对一个简单列表进行排序时,它给了我这个错误

错误:(19, 20) 错误: 没有找到适合排序的方法(T#1) 方法 Collections.sort(List) 不适用 (无法推断类型变量 T#2 (参数不匹配;T#1 无法转换为 List)) 方法 Collections.sort(List,Comparator) 不适用 (无法推断类型变量 T#3 (实际参数列表和形式参数列表的长度不同)) 其中 T#1,T#2,T#3 是类型变量: T#1 扩展了在方法 sort(T#1) 中声明的 List T#2 扩展了方法 sort(List) 中声明的 Comparable T#3 扩展方法 sort(List,Comparator) 中声明的对象 其中 CAP#1 是一个新的类型变量: CAP#1 扩展了 Comparable 的捕获?扩展可比

那有什么问题?!

提前致谢:)))

【问题讨论】:

  • 其中一个问题是如果T extends PList&lt;T&gt; 没有扩展List&lt;P&gt;,那么不知何故你的泛型不正确,因为你期待T extends List&lt;..&gt;
  • 该方法的目的是什么?为什么不就地调用 Collections.sort()?!

标签: java generic-programming generic-list


【解决方案1】:

正如@Bejan George 所指出的,在这种情况下,泛型类型不应该是列表,而是列表中包含的可比较元素。

正确的实现是:

public static <T extends Comparable> List<T> sort(List<T> objects) {
    Collections.sort(objects);
    return objects; 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多