该代码可以在Eclipse(20090920-1017)中编译并正常运行
import java.util.*;
public class SortNull {
static >
Comparator nullComparableComparator() {
return new Comparator() {
@Override public int compare(T el1, T el2) {
return
el1 == null ? -1 :
el2 == null ? +1 :
el1.compareTo(el2);
}
};
}
public static void main(String[] args) {
List numbers = new ArrayList(
Arrays.asList(3, 2, 1, null, null, 0)
);
Comparator numbersComp = nullComparableComparator();
Collections.sort(numbers, numbersComp);
System.out.println(numbers);
// "[null, null, 0, 1, 2, 3]"
List names = new ArrayList(
Arrays.asList("Bob", null, "Alice", "Carol")
);
Comparator namesComp = nullComparableComparator();
Collections.sort(names, namesComp);
System.out.println(names);
// "[null, Alice, Bob, Carol]"
}
}
但是它不能在上编译javac 1.6.0_17。这是错误消息:
SortNull.java:17: incompatible types; no instance(s) of type variable(s) T exist
so that java.util.Comparator conforms
to java.util.Comparator
found : java.util.Comparator
required: java.util.Comparator
Comparator numbersComp = nullComparableComparator();
SortNull.java:25: incompatible types; no instance(s) of type variable(s) T exist
so that java.util.Comparator conforms
to java.util.Comparator
found : java.util.Comparator
required: java.util.Comparator
Comparator namesComp = nullComparableComparator();
2 errors
有人可以解释为什么差异吗?这是错误吗?如果是这样,谁有错误?