java - 有人能解释一下这个 Java 代码片段是如何工作的吗?

标签 java generics collections

这是代码片段(来自 Java 泛型和集合),下面是问题:

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); }
    };
}

正如我所关注的,您有一个使用通配符的方法,该方法在比较类型 T 和“above”的地方扩展了可比较的值。然后它返回一个新的 Comparator,其中显然有一个方法,该方法使用两个 T 类型的对象返回compareTo 的值。所以问题:

  1. 这是在方法内定义方法吗?我以为你做不到 Java 中的内容。
  2. 它返回一个方法吗?有些事我也认为你做不到 在Java中。
  3. 我该如何使用它?本书使用的例子包括其他类似的、 方法有参数。

这里没有参数,那么o1和o2从哪里来?

最佳答案

这是一个 anonymous class :

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);
        }
    };
}

你是:

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

关于java - 有人能解释一下这个 Java 代码片段是如何工作的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21656769/

相关文章:

javascript - 将新模型添加到 Backbone 集合中,而不是替换

java - IntelliJ 插件开发从 PsiAnnotationMemberValue 获取实际对象

java - Collection 的 contains 方法是否会为添加到其中的实例返回 false?

java - 在 Java 中翻转硬币

java - java中单行注释和多行注释有什么区别?

objective-c - NSMutableSet 的 addObject 方法是否替换重复或忽略插入?

java泛型,关于extends和super的说明

c# - 泛型变量限制和接口(interface)

java - 合并集合图

java - .mapToLong方法逻辑