Трудности Понимание Сравнимого броска<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>
,