有人可以解释这个Java代码片段是如何工作的吗?

fuz*_*cal 0 java generics collections

这是片段(来自Java Generics and Collections),下面是问题:

public static <T extends Comparable<? super T>> Comparator<T> reverseOrder()
    {
        return new Comparator<T>() {
        public int compare(T o1, T o2) { return o2.compareTo(o1); }
    };
}
Run Code Online (Sandbox Code Playgroud)

正如我所遵循的那样,你有一个使用通配符的方法,它可以比较类型T和"上面".然后它返回一个新的Comparator,它在其中显然有一个方法,它使用两个类型为T的对象返回compareTo的值.所以问题:

  1. 这是在方法中定义方法吗?我以为你不能用Java做到这一点.
  2. 它返回一个方法吗?我认为你不能用Java做的事情.
  3. 我该如何使用它?本书使用了其他类似方法具有参数的示例.

这没有参数,所以o1和o2来自哪里?

joh*_*902 5

这是一个匿名类:

public static <T extends Comparable<? super T>> Comparator<T> reverseOrder() {
    return new Comparator<T>() {
        public int compare(T o1, T o2) {
            return o2.compareTo(o1);
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

你是:

  1. 在方法compare中的匿名类中声明一个方法reverseOrder.
  2. 返回匿名类的实例.
  3. 声明 o1o2作为参数compare.