method Arrays.<T#1>binarySearch(T#1[],T#1,Comparator<? super T#1>) is not applicable
时间: 2024-05-10 20:18:22 浏览: 10
这个错误通常发生在尝试使用 `Arrays.binarySearch()` 方法时,传递的比较器与数组元素类型不匹配。这个方法期望传递的比较器是一个与数组元素类型相同或是其父类的比较器。
以下是一个示例代码,用于演示如何使用 `Arrays.binarySearch()` 方法:
```java
// 创建一个包含整数的数组
Integer[] arr = {2, 4, 6, 8, 10};
// 通过 lambda 表达式创建一个比较器
Comparator<Integer> cmp = (a, b) -> a - b;
// 在数组中查找元素 6 的索引位置
int index = Arrays.binarySearch(arr, 6, cmp);
// 输出结果
System.out.println("Index of 6: " + index);
```
在上面的示例中,我们创建了一个包含整数的数组,并使用 lambda 表达式创建了一个比较器。然后,我们使用 `Arrays.binarySearch()` 方法在数组中查找元素 6 的索引位置,并将结果输出到控制台上。
确保传递的比较器与数组元素类型相同或是其父类,就可以避免出现 `Arrays.<T#1>binarySearch(T#1[],T#1,Comparator<? super T#1>) is not applicable` 这个错误。
相关问题
Line 6: error: no suitable method found for sort(int[],<anonymous Comparator<Integer>>) Arrays.sort(nums, new Comparator<Integer>() { ^ method Arrays.<T#1>sort(T#1[],Comparator<? super T#1>) is not applicable (inference variable T#1 has incompatible bounds equality constraints: int lower bounds: Integer,Object) method Arrays.<T#2>sort(T#2[],int,int,Comparator<? super T#2>) is not applicable (cannot infer type-variable(s) T#2 (actual and formal argument lists differ in length)) where T#1,T#2 are type-variables: T#1 extends Object declared in method <T#1>sort(T#1[],Comparator<? super T#1>) T#2 extends Object declared in method <T#2>sort(T#2[],int,int,Comparator<? super T#2>)
这个错误的原因是`Arrays.sort`方法的第二个参数的类型不正确。`Arrays.sort`方法的第二个参数类型应该为`Comparator`,但是当前传入的是一个匿名内部类`new Comparator<Integer>() {...}`。这个匿名内部类的类型是`Comparator<Integer>`,而不是`Comparator`,因此编译器会报错。
要解决这个问题,可以将匿名内部类的类型改为`Comparator`,如下所示:
```java
Comparator<Integer> comparator = new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
};
Arrays.sort(nums, comparator);
```
这样就可以使用`Comparator`来指定排序规则了。
java: 对于sort(int[],(o1,o2)->o2 - o1), 找不到合适的方法 方法 java.util.Arrays.<T>sort(T[],java.util.Comparator<? super T>)不适用 (推论变量 T 具有不兼容的限制范围 等式约束条件: int 上限: java.lang.Object) 方法 java.util.Arrays.<T>sort(T[],int,int,java.util.Comparator<? super T>)不适用 (无法推断类型变量 T (实际参数列表和形式参数列表长度不同))
这个错误提示表明使用lambda表达式时,编译器无法推断出泛型类型参数T的具体类型,需要显式指定泛型类型参数,示例代码如下:
```
int[] arr = {5, 2, 8, 1, 9};
Arrays.sort(arr, (Integer o1, Integer o2) -> o2 - o1);
System.out.println(Arrays.toString(arr)); // 输出 [9, 8, 5, 2, 1]
```
以上代码中,显式指定了泛型类型参数为Integer,即`(Integer o1, Integer o2) -> o2 - o1`,表示o2大于o1时返回正数,o2等于o1时返回0,o2小于o1时返回负数,实现降序排列。