2014-02-09 72 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
相關問題