尝试用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/