本帖最后由 杨卓儒 于 2012-8-30 13:43 编辑
public static <T> Comparator<T> reverseOrder() {
return (Comparator<T>) REVERSE_ORDER;
}
private static final Comparator REVERSE_ORDER = new ReverseComparator();
/**
* @serial include
*/
private static class ReverseComparator<T>
implements Comparator<Comparable<Object>>, Serializable {
// use serialVersionUID from JDK 1.2.2 for interoperability
private static final long serialVersionUID = 7207038068494060240L;
//定义比较器的时候,不会要求传入对象类型,但是你如果使用compare方法的时候,总要传入两个参数吧,
//即下面compare方法中的c1,与c2,那么这时比较器会返回相应对象类型。
//因此,同时可以看出,如果在比较器没有定义泛型的话,在调用函数compare方法的时候,比较器会默认
//载入调用对象的类型。因此楼主所顾虑的它为什么能自动识别就不存在了,因为它压根儿就没识别,只是
//用的时候才会传入
public int compare(Comparable<Object> c1, Comparable<Object> c2) {
return c2.compareTo(c1);
}
private Object readResolve() { return reverseOrder(); }
}
我是这么理解的,不知道对不对。
|