Методы в обобщениях

201
16 апреля 2018, 01:23

Имеется класс:

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, но хочу и сохранить данный класс обобщённым.

Answer 1

Для того, чтобы пользоваться интерфейсом Comparable в обобщённом классе вам нужно расширить связанный тип этим интерфейсом.

class Box<T extends Comparable<T>> {}
Answer 2

Если класс имплементирует comparable, то в нем должен быть должен быть определен метод compareTo() вида

@Override
public int compareTo(User user) {
 //
}

В вашем случае из-за этого вылетает ошибка. Подробнее здесь

Answer 3

Так как это обобщение <T>, то он не может сравнить два обьекта пока ты их не инициализируешь одним из типов (byte, double, integer, float, long или short).

READ ALSO
Ошибка с MediaView/Media/MediaPlayer в JavaFX

Ошибка с MediaView/Media/MediaPlayer в JavaFX

Ошибка с MediaView/Media/MediaPlayer, при запуске кода:

220
Как получить частоты из звука андроид

Как получить частоты из звука андроид

Как получить частоты звука на андроидВедь из аудиофайла я получаю массив байтов

197
Не могу понять смысл слова static

Не могу понять смысл слова static

Ребят, помогите мне понять, зачем перед функцией писать слово static?

194
Проблема в шейдере при отрисовки

Проблема в шейдере при отрисовки

Продолжение к моей прошлой работеЯ продвинулся дальше

204