public class CollectionUtils {
public static <T extends Comparable<? super T>> Comparator<T> comparableComparator() {
return new Comparator<T>() {
public int compare(T o1, T o2) {
return o1.compareTo(o2);
}
};
}
public static <T> Comparator<T> reverseComparator(
final Comparator<T> c) {
return new Comparator<T>() {
public int compare(T o1, T o2) {
return -c.compare(o1, o2);
}
};
}
public static <T extends Comparable<? super T>> Comparator<T> reverseComparableComparator() {
return CollectionUtils.reverseComparator(CollectionUtils.<T>comparableComparator());
}
private static Object foo() {
return new TreeMap<Integer, Object>(reverseComparableComparator()); }
Though eclipse clearly does one more level of unfolding: it diagnoses Comparable<? super Comparable<? super T>>. Any way, this code will be legal if JSR to improve type inference will ever approve it