Подстановочные знаки Java с супер

1

Я читал, что с помощью подстановочного знака с супер:

public class MyClass <T extends Comparable<? super T>> {
   ...
}

вместо:

public class MyClass <T extends Comparable<T>> {
   ...
}

может сделать класс более общим, но я не понимаю, почему.

Может ли кто-нибудь дать конкретные примеры?

Теги:
generics
wildcard
comparable
super

1 ответ

5
Лучший ответ

Таким образом, вы можете предоставить класс для T, который не для себя реализует Comparable, но наследует от класса, реализующего Comparable.

Например

class Baseclass implements Comparable<Baseclass> {
...
}

class Inherited extends Baseclass {
...
}

Со спецификацией

public class MyClass <T extends Comparable<? super T>> {
...
}

вы можете использовать MyClass<Inherited> и MyClass<Baseclass>, но с

public class MyClass <T extends Comparable<T>> {
...
}

вы можете использовать MyClass<Baseclass>

  • 0
    Я действительно попробовал это. Я создал класс Fruit, который реализует Comparable <Fruit> и 2 подкласса: Apple и Orange. Затем я попытался использовать метод, написанный в этой форме <T extends Comparable <T >> (обратите внимание, что я не использовал супер-ключевое слово), и тем не менее он сравнивал яблоки с апельсинами. У тебя есть идеи почему? Это не должно работать в соответствии с вашим ответом.
  • 0
    Вот другой мой вопрос: stackoverflow.com/questions/24629547/…
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню