我遇到以下编译错误:
The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (T[], Comparator<capture#1-of ? extends T>) Main.java /Sorting/src/com/kash/test line 11
The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (T[], Comparator<capture#2-of ? super T>) Main.java /Sorting/src/com/kash/test line 15
The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (T[], Comparator<T>) Main.java /Sorting/src/com/kash/test line 19
当我编译(在Eclipse Juno中使用JDK 1.7.0)时此代码:
package com.kash.test;
import java.util.Collections;
import java.util.Comparator;
// 3 attempts to write a wrapper over: Collections' method
// public static <T> void sort(List<T> list, Comparator<? super T> c)
public class Main {
public static <T> void sort1(T[] array, Comparator<? extends T> c) {
Collections.sort(array, c); // line 11
}
public static <T> void sort2(T[] array, Comparator<? super T> c) {
Collections.sort(array, c); // line 15
}
public static <T> void sort3(T[] array, Comparator<T> c) {
Collections.sort(array, c); // line 19
}
public static void main(String[] args) {
}
}
我已阅读以下内容,但并不是很了解。有什么帮助吗?
- 编辑 -
对于那些想要知道为什么我会做这些愚蠢事情的挑剔的家伙。如果你不在乎我为什么要这样做,不要打扰其他人。
为什么?
我正在编写以下界面的几种实现(例如Quick,Insertion,Heap,Mixed,Intro,Bubble,...):
package com.kash.src;
import java.util.Comparator;
import java.util.List;
/**
* Interface that provides all sorting functions for all possible representations of a list of Objects (non-primitive
* types). <br>
* - {@link List}<{@link Comparable}><br>
* - Array of < ? extends {@link Comparable}><br>
* - {@link List}< ? > with external {@link Comparator}<br>
* - Array of < ? > with external {@link Comparator}<br>
*
* @author Kashyap Bhatt
*
*/
public interface Sorter {
<T extends Comparable<T>> void sort(List<T> list);
<T extends Comparable<T>> void sort(T[] array);
<T extends Object> void sort(List<T> list, Comparator<? super T> c);
<T extends Object> void sort(T[] array, Comparator<? super T> c);
}
这样我就可以测试所有排序实现并测试它们。我想将结果与Java的排序实现进行比较,所以我也在编写一个这个接口的实现,它在内部只调用Java的排序方法。这就是我遇到问题的地方。
答案 0 :(得分:3)
Collections#sort需要List
做:
public static <T> void sort1(T[] array, Comparator<? extends T> c) {
Collections.sort(Arrays.asList(array), c); // line 11
}
答案 1 :(得分:3)
Collections.sort()
不对数组进行排序,而是List
s。
答案 2 :(得分:1)
类型集合中的方法
sort(List<T>, Comparator<? super T>)
不适用于参数(T[], Comparator<capture#1-of ? extends T>)
Main.java / Sorting / src / com / kash / test line 11
您正在通过T[]
预计会出现List<T>
,Comparator<? extends T>
预计会出现Comparator<? super T>
。
为什么你认为它不应该出错?