2012-05-18 3 views
0

Я хочу создать класс, который выделяет Comparator. Этот компаратор будет сравнивать два массива, где массивы могут содержать все, что сопоставимо. Что-то, что позволит мне делать такие вещи:Создание универсального класса, где параметр является массивом

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 необходимо, чтобы элементы массива были «сопоставимы» с самим собой. – 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 реализует Comparator {...' тогда необходимо указать его как: 'new A ' или ' extends A 'или аналогичный –

+0

Umm @Vulcan ... Я вставил его непосредственно из Eclipse, я (обычно) всегда тестировал сначала и делал это и на этот раз. Может быть, поэтому Чип снял свой комментарий? –

+0

Отличные два комментатора (Chip and Vulcan) удалили свои комментарии, так что теперь он выглядит как монолог :) –

Смежные вопросы