Страницы

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

вторник, 28 мая 2019 г.

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

Помогите с реализацией интерфейса. Допустим у нас есть интерфейс
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, и мог сравнивать объекты?


Ответ

Вы не можете в данной функции сравнивать два объекта таким образом, так как не понятно какой из них считать большим, а какой меньшим (и равным). 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

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

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