java - Collections.binarySearch 的通用列表参数错误

标签 java generics

尝试用 Java 编写 Python 风格的 bisect_right,并使用 List 参数的泛型类型:

import java.util.*;

class Util {

    /* eqv to python's bisect_right. That is: return insertion point, but
    if key is in list, insertion point is to right of it.
    */
    //public static int bisect_right(List<String> list, String x) { //>> type specific
    public static <E> int bisect_right(List<E> list, E x) {
        int idx = Collections.binarySearch(list, x);     

        if (idx >= 0) { // key contained in list
            idx = idx + 1;
        }           
        else {
            idx = -idx -1; 
        }
        return idx;
    }
}   

编译器提示找不到与Collections.binarySearch匹配的方法。我做错了什么?

最佳答案

问题是 E需要是Comparable<? super E>调用the Collections.binarySearch method ,但你在 E 上没有这个限制.

将其添加到 E 的声明中在您的bisect_right上方法。

public static <E extends Comparable<? super E>> int bisect_right(List<E> list, E x) {

(<E extends Comparable<E>>似乎也可以在这里工作。)

关于java - Collections.binarySearch 的通用列表参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25297907/

相关文章:

java - 类型安全: Unchecked cast when extending generics

java - Linux 服务器上的 HTTP 直播

java string.format函数格式标志异常

java - 在java方法重写中使用通配符

scala - 如何在scala中实现类型安全域存储库?

Java接口(interface)问题

generics - 程序员如何获得经验?

java - 如果字符串中的唯一 id 大小小于 11 个字节,则生成

Java 字符串合并排序仅适用于最多四个元素的数组列表

c# - 如何获取两个 T 类型变量之间的所有值?