Имеется класс:
public class Box<T> extends ArrayList<T> {
private T o;
public Box() {
}
public Box(T o) {
super();
this.o = o;
}
T min(T t1, T t2) {
T t3 = null;
int result = t1.compareTo(t2);
return t3;
}
}
В строке int result= t1.compareTo(t2); выбивает ошибку. Что делать, если я хочу сравнить два объекта, внутри которых уже имплементирован интерфейс Comparable, но хочу и сохранить данный класс обобщённым.
Для того, чтобы пользоваться интерфейсом Comparable в обобщённом классе вам нужно расширить связанный тип этим интерфейсом.
class Box<T extends Comparable<T>> {}
Если класс имплементирует comparable, то в нем должен быть должен быть определен метод compareTo() вида
@Override
public int compareTo(User user) {
//
}
В вашем случае из-за этого вылетает ошибка. Подробнее здесь
Так как это обобщение <T>, то он не может сравнить два обьекта пока ты их не инициализируешь одним из типов (byte, double, integer, float, long или short).
Сборка персонального компьютера от Artline: умный выбор для современных пользователей