我想創建一個類來執行比較器。這個比較器將比較兩個數組,其中數組可以包含任何可比較的數組。東西會讓我做這樣的事情:創建一個泛型類,其中參數是一個數組
comparator.compare(new Integer[] {1,2}, new Integer[] {3,4,5});
參數的類型不一定是Integer []。他們可以是任何東西的數組。
有什麼辦法可以用泛型創建這樣的類?或者我的比較器應該接收對象。如果它必須接收對象,我該如何檢查它是否是一個數組並從它內部獲取元素?
我想創建一個類來執行比較器。這個比較器將比較兩個數組,其中數組可以包含任何可比較的數組。東西會讓我做這樣的事情:創建一個泛型類,其中參數是一個數組
comparator.compare(new Integer[] {1,2}, new Integer[] {3,4,5});
參數的類型不一定是Integer []。他們可以是任何東西的數組。
有什麼辦法可以用泛型創建這樣的類?或者我的比較器應該接收對象。如果它必須接收對象,我該如何檢查它是否是一個數組並從它內部獲取元素?
如何使用數組本身作爲Comparator
的類型參數?
public class ArrayComparator<T extends Comparable<? super T>> implements
Comparator<T[]> {
@Override
public int compare(T[] o1, T[] o2) {
// TODO
}
}
您的比較器參數類型應該是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}));
}
}
我認爲OP需要數組的元素自己是「Comparable」。 – Jeffrey
是的,你可以,例如像這樣:
implements Comparator<T[]> {
@Override
public int compare(T[] array1, T[] array2) {
//compare arrays here
return ...;
}
或比較喜歡這種方法,將推斷主叫值類型:
public static <T> int compare(T[] array1, T[] array2) {
當然,你可以,但取決於具體的課程使用情況,必須在某個時刻指定它......'A
Umm @Vulcan ...我直接從Eclipse中粘貼它,我(通常)總是先測試,然後這樣做。也許這就是爲什麼Chip刪除了他的評論? –
偉大的兩位評論員(Chip和Vulcan)刪除了他們的評論,所以現在看起來像是一個獨白:) –
你想讓比較器做什麼?比較每個元素? – Chip
是的。我尋找一個apache-commons來做到這一點,但找不到一個,所以我正在實施我自己的。任何關於預製的建議都會有所幫助! – Rafael