Трудности Понимание Сравнимого броска<T>

Я только что написал метод, который принимает два аргумента: 1. Список массивов любого типа, который расширяет Number, и 2. Число того же типа. Этот метод должен возвращать список массивов всех чисел, меньших, чем второй аргумент.

Мой класс называется Quiz3FinalQuestion<T extends Comparable>>

Мой метод, который я написал, выглядит так,

public static <T extends Number> ArrayList<T> lessThan(ArrayList<T> lst, T number) {
        ArrayList<T> arLst = new ArrayList<>();
        for (T obj: lst) {
            if (((Comparable<T>) obj).compareTo(number) < 0)
                arLst.add(obj);
        }
        return arLst;
}

Это работает как ожидалось, но если бы у меня не было прекомпилятора Java, говорящего мне приводить obj к типу Comparable, это не запустилось бы. Я предполагаю, что числовой параметр приведен в Comparable версии CompareTo. Поэтому, когда я добавляю объект obj в свой arLst, объект должен быть приведен обратно к типу T, верно? Кроме того, есть ли более простые способы сравнить объекты класса-оболочки неизвестного типа T?

1 ответ

Решение

Вы можете применить это T также расширяется Comparable<? super T>: 1

public static <T extends Number & Comparable<? super T>>
ArrayList<T> lessThan(ArrayList<T> lst, T number) {
    ...
}

Затем вы можете удалить актерский состав.


1. См., Например, объяснение общего <T extends Comparable<? super T>> в collection.sort/ сопоставимый код? почему мы не просто используем Comparable<T> ,

Другие вопросы по тегам