Страницы

Поиск по вопросам

воскресенье, 8 марта 2020 г.

Имплементация интерфейса с generic type

#java #generics #интерфейс


Помогите с реализацией интерфейса. Допустим у нас есть интерфейс 

public interface Sorter> {
    void sort(List list);
}


и я хочу создать класс, который будет реализовывать этот интерфейс используя genec
types. Я пробовала так:

public class SorterImpl> implements Sorter {
    public void sort(List list){
        boolean erijuht1 = true; 
        boolean erijuht2 = true; 
        for(int a=0; a list.get(a+1)){
                erijuht1 = false;
            }
            if(list.get(a) < list.get(a+1)){ 
                erijuht2 = false;
            }
        }
    }
}


Проблема в том, что последний класс не хочет сравнивать объекты между собой.
Как мне реализовать данный интерфейс так, что бы класс был и с generic type, и мог
сравнивать объекты?
    


Ответы

Ответ 1



Вы не можете в данной функции сравнивать два объекта таким образом, так как не понятно какой из них считать большим, а какой меньшим (и равным). list.get() возвращает Вам объект класса T, наследуемый от Comparable. Значит мы можем использовать вызывать все методы этого класса, а в данном случае compareTo (возвращает 1,0 или -1). Осталось добавить код для перемены мест в случае если "больший" имеет меньший индекс. Вот что получилось: public class SorterImpl> implements Sorter { public void sort(List list) { // boolean erijuht1 = true; // boolean erijuht2 = true; for (int j = 0; j < list.size() - 1; j++) for (int a = 0; a < list.size() - j - 1; a++) { if (list.get(a).compareTo(list.get(a + 1)) > 0) { // erijuht1 = false; } else { // erijuht2 = false; T temp = list.get(a + 1); list.set(a + 1, list.get(a)); list.set(a, temp); } } } //Тестируем public static void main(String[] args) { List ar = new ArrayList() { { add(2); add(3); add(5); add(8); add(2); } }; SorterImpl s = new SorterImpl(); s.sort(ar); for (int i = 0; i < ar.size(); i++) { System.out.print(ar.get(i).toString() + " "); } } } Результат: 8 5 3 2 2

Комментариев нет:

Отправить комментарий