Действительно ли возможно указать и ограничения верхней и нижней границы на параметры типа в Java?

Действительно ли возможно указать и ограничения верхней и нижней границы на параметры типа в Java?

Я нашел разговор на форуме Sun, на котором обсуждался этот вопрос (по-видимому, прежде чем функция дженериков была завершена), но не было никакого окончательного ответа.

Таким образом, существует ли допустимый синтаксис, чтобы сделать следующее?

public class MyClass

16
задан Hosam Aly 20 September 2019 в 20:58
поделиться

1 ответ

Я в это не верю - насколько я могу судить из спецификации языка, "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)
12
ответ дан 30 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: