Действительно ли возможно указать и ограничения верхней и нижней границы на параметры типа в Java?
Я нашел разговор на форуме Sun, на котором обсуждался этот вопрос (по-видимому, прежде чем функция дженериков была завершена), но не было никакого окончательного ответа.
Таким образом, существует ли допустимый синтаксис, чтобы сделать следующее?
public class MyClass
Я в это не верю - насколько я могу судить из спецификации языка, "super" в первую очередь допустимо только для типов с подстановочными знаками. Синтаксис для подстановочных знаков также предполагает, что у вас может быть только один связанный подстановочный знак, поэтому вы также не можете использовать что-то вроде этого:
// Invalid
void foo(List<? extends Foo super Bar> list)
Хотя оба из них в порядке:
// Valid
void foo(List<? extends Foo> list)
// Valid
void foo(List<? super Bar> list)
Как отмечено в комментариях, возможно иметь несколько верхних границ - но только для параметров типа и выражений приведения. Например:
// Valid
<T extends Number & Comparable> void foo(List<T> list)