2014-02-09 49 views
0

这里是片段(来自Java泛型和类别)及以下的问题:“上述”有人可以解释这个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和有一种方法然后,它返回一个新的比较器apparrently有一个方法里面,返回使用类型T.所以问题的两个对象的compareTo一个值:

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

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

+3

匿名类:http://docs.oracle.com/javase/tutorial/java/javaOO/ anonymousclasses.html –

+0

仔细观察,o1和o2是参数,它们来自哪里。 – rocketboy

+1

我编辑了你的文章,使用枚举的markdown语法,但我认为最后一句应该在问题3)。道歉! – thrau

回答

0

问题/试图回答:

正如我跟着你必须使用扩展可比通配符它的类型T和比较的方法“上面”。

方法可以不扩展,所以不,这是不正确的。该方法是通用的,可用于扩展Comparable的具体类。

然后它返回一个新的比较器apparrently内部具有方法,使用类型T的两个对象做题返回的compareTo的值:

OK,一种正确的。

1)这是否定义了一个方法内的方法?我以为你不能在Java中这样做。

这不是一种方法。这是一种返回比较器类型的对象的方法,该比较器具有自己的比较方法。

2)它是否返回一个方法?我也认为你在Java中无法做到的事情。

不,它返回一个匿名内部类的对象。

3)如何使用它?本书使用其他类似方法具有参数的示例。这没有参数,所以o1和o2从哪里来?

o1和o2是Comparator对象比较方法的声明参数。

5

这是一个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
相关问题