尝试用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的方法。我究竟做错了什么?

最佳答案

问题在于,对the E method的调用需要Comparable<? super E>Collections.binarySearch,但是在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/

10-11 00:42