Учитывая интерфейс Calorie и реализованные классы
// Interface that defines that item has calories and may be compared by it
interface Calorie extends Comparable<Calorie> {
public int compareTo(Calorie object);
public int getCalories();
}
// Examples of classes CaloryGrader is supposed to work with
class Drink implements Calorie {
// Some implemenation...
}
class Bakery implements Calorie {
// Some implementation...
}
class Cake extends Bakery {
// Some implementation...
}
## Given CaloryGrader class where I need to implement sorted static "grade" method ##
class CaloryGrader {
/**
* Returns sorted in ascending order copy of items list.
*
* Sort order is defined by item calories.
*
* @param items collection of items to sort
* @return sorted copy
*/
public List grade(List items) {
// Add implementation
}
}
Задача состоит в том, чтобы - написать оценку с помощью обобщений, чтобы она могла сортировать только список элементов, которые включают в себя Calories и его подклассы.
Я написал следующую подпись метода оценки
public static <T extends Calorie> List<T> grade(List<T> items) {
Тем не менее, он не работает, и я не могу понять, почему.
T тип элемента, который может принять метод List является типом возврата метода
Я предполагал, что аргумент List ограничит список, который может быть передан методутолько для всех подклассов калорий.Но сейчас это не правильно.
Я могу создать список raw type и передать его методу.Я предполагаю, что это связано с тем, что он преобразуется в List и подходит.
Разрешение должно состоять в том, чтобы не передавать необработанные типы в метод и получать ошибку во время компиляции.Наверное, я что-то упустил.