Я читал, что с помощью подстановочного знака с супер:
public class MyClass <T extends Comparable<? super T>> {
...
}
вместо:
public class MyClass <T extends Comparable<T>> {
...
}
может сделать класс более общим, но я не понимаю, почему.
Может ли кто-нибудь дать конкретные примеры?
Таким образом, вы можете предоставить класс для 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>