2012-05-18 208 views
0

我想創建一個類來執行比較器。這個比較器將比較兩個數組,其中數組可以包含任何可比較的數組。東西會讓我做這樣的事情:創建一個泛型類,其中參數是一個數組

comparator.compare(new Integer[] {1,2}, new Integer[] {3,4,5}); 

參數的類型不一定是Integer []。他們可以是任何東西的數組。

有什麼辦法可以用泛型創建這樣的類?或者我的比較器應該接收對象。如果它必須接收對象,我該如何檢查它是否是一個數組並從它內部獲取元素?

+1

你想讓比較器做什麼?比較每個元素? – Chip

+0

是的。我尋找一個apache-commons來做到這一點,但找不到一個,所以我正在實施我自己的。任何關於預製的建議都會有所幫助! – Rafael

回答

3

如何使用數組本身作爲Comparator的類型參數?

public class ArrayComparator<T extends Comparable<? super T>> implements 
     Comparator<T[]> { 
    @Override 
    public int compare(T[] o1, T[] o2) { 
     // TODO 
    } 
} 
2

您的比較器參數類型應該是T []。

下面是一個例子用法:

public class Test<T> implements java.util.Comparator<T[]> { 

    @Override 
    public int compare(T[] paramT1, T[] paramT2) { 
     return 0; 
    } 

    public static void main(String[] args) { 
     System.out.println(new Test<Integer>().compare(new Integer[] {1,2}, new Integer[] {3,4,5})); 
    } 

} 
+0

我認爲OP需要數組的元素自己是「Comparable」。 – Jeffrey

2

是的,你可以,例如像這樣:

implements Comparator<T[]> { 
    @Override 
    public int compare(T[] array1, T[] array2) { 
     //compare arrays here 
     return ...; 
    } 

或比較喜歡這種方法,將推斷主叫值類型:

public static <T> int compare(T[] array1, T[] array2) { 
+0

當然,你可以,但取決於具體的課程使用情況,必須在某個時刻指定它......'A implements Comparator {...'然後必須指定它:'new A '或'擴展A '或類似的 –

+0

Umm @Vulcan ...我直接從Eclipse中粘貼它,我(通常)總是先測試,然後這樣做。也許這就是爲什麼Chip刪除了他的評論? –

+0

偉大的兩位評論員(Chip和Vulcan)刪除了他們的評論,所以現在看起來像是一個獨白:) –

相關問題