Сравнение различных подтипов универсального типа T с сопоставимым интерфейсом

#java #generics #wildcard #comparable

#java #общие #подстановочный знак #сопоставимый

Вопрос:

Я хочу иметь возможность написать что-то вроде этого:

 Fruit f1 = new Apple();
Fruit f2 = new Orange();
int res = f1.compareTo(f2);
 

Реализация сопоставимого интерфейса в классе fruit следующим образом:

 public class Fruit<T> implements Comparable<? extends T> {

    int compareTo(T other) {
        ...
    }
}
 

Похоже, не работает.
Я предполагаю, что есть некоторые хитрости с ключевым словом super в подстановочном знаке…

Ответ №1:

Вы слишком усложняете его. Для этого вам не нужны подстановочные знаки:

 public class Fruit implements Comparable<Fruit> {

    public int compareTo(Fruit other) {
        // ...
    }
}