泛型可以在Eclipse中編譯和運(yùn)行,但不能在javac中編譯
該代碼可以在Eclipse(20090920-1017)中編譯并正常運(yùn)行import java.util.*;public class SortNull { static <T extends Comparable<? super T>> Comparator<T> nullComparableComparator() { return new Comparator<T>() { @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<Integer> numbers = new ArrayList<Integer>( Arrays.asList(3, 2, 1, null, null, 0) ); Comparator<Integer> numbersComp = nullComparableComparator(); Collections.sort(numbers, numbersComp); System.out.println(numbers); // "[null, null, 0, 1, 2, 3]" List<String> names = new ArrayList<String>( Arrays.asList("Bob", null, "Alice", "Carol") ); Comparator<String> namesComp = nullComparableComparator(); Collections.sort(names, namesComp); System.out.println(names); // "[null, Alice, Bob, Carol]" }}但是它不能在上編譯javac 1.6.0_17。這是錯(cuò)誤消息:SortNull.java:17: incompatible types; no instance(s) of type variable(s) T exist so that java.util.Comparator<T> conforms to java.util.Comparator<java.lang.Integer>found : <T>java.util.Comparator<T>required: java.util.Comparator<java.lang.Integer> Comparator<Integer> numbersComp = nullComparableComparator();SortNull.java:25: incompatible types; no instance(s) of type variable(s) T exist so that java.util.Comparator<T> conforms to java.util.Comparator<java.lang.String>found : <T>java.util.Comparator<T>required: java.util.Comparator<java.lang.String> Comparator<String> namesComp = nullComparableComparator();2 errors有人可以解釋為什么差異嗎?這是錯(cuò)誤嗎?如果是這樣,誰有錯(cuò)誤?
查看完整描述