Помогите с реализацией интерфейса. Допустим у нас есть интерфейс
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
Комментариев нет:
Отправить комментарий