Расширение компаратора java для сравнения определенного класса, реализующего интерфейс, который он сравнивает.

У меня есть такой компаратор:

public class XComparator implements Comparator<X>, Serializable {
}

который в настоящее время используется для сортировки списка объектов Y, где Y реализует X

Я хочу создать компаратор для Y, который расширяет XComparator, чтобы я мог сравнивать на основе логического члена данных Y, а затем вызывал super.compare.

Я пробовал несколько разных подходов к этому, но, похоже, ни один из них не работает. Это вообще возможно?


person Veg    schedule 26.02.2013    source источник
comment
Почему вы хотите продлить? Просто создайте новый и используйте существующий.   -  person Bhesh Gurung    schedule 27.02.2013


Ответы (2)


Невозможно расширить XComparator и изменить общий параметр Comparator на Y, но вы можете создать класс YComparator, который просто имеет XComparator внутри и делегирует ему. Что-то типа:

public class YComparator implements Comparator<Y>, Serializable {
    private XComparator xComparator = new XComparator();

    @Override
    public int compare(Y y1, Y y2) {
         // compare y1.booleanData with y2.booleanData
         if (...)
             ...;

         // else otherwise:
         return xComparator.compare(y1, y2);
    }
}
person matts    schedule 26.02.2013

Используйте делегирование вместо наследования.

Ваш YComparator должен содержать и делегировать XComparator.

person Aaron Kurtzhals    schedule 26.02.2013