Выделение общего типа с ограниченным подстановочным знаком с использованием алмаза

Следующий код:

Set<? extends Integer> set = new HashSet<>();

Компилируется нормально. Однако суть использования ромбовидной нотации как раз в том, чтобы не переписывать снова параметр типа LHS. Это означает, что приведенное выше утверждение должно быть эквивалентно следующему:

Set<? extends Integer> set = new HashSet<? extends Integer>();

Но, как оказалось, это не так. Я думаю, это рационально, поскольку компилятор не знает параметр типа объекта, так как это подстановочный знак ('?'). Когда не используются параметры ограниченного типа, все работает нормально, поэтому я предположил, что то же самое будет применяться в любом случае. Но зачем вообще разрешать синтаксис? Что, в конце концов, является параметром типа первого оператора?

Спасибо


person Some1    schedule 09.01.2021    source источник
comment
Этот вопрос может быть даже дубликатом последнего, который я перечислил.   -  person Slaw    schedule 09.01.2021
comment
См. также: softwareengineering.stackexchange.com/questions/194107/   -  person Sweeper    schedule 09.01.2021
comment
Задавать  -  person Prateek Pande    schedule 09.01.2021
comment
Кроме того, Сет‹? расширяет Integer› set = new HashSet‹›(); является допустимым выражением, так как компилятор выведет тип HashSet. Но с новым HashSet‹? расширяет Integer›(); компилятор застрял с подстановочным знаком, а не с фактическим типом объекта, и компилятор не может сделать вывод.   -  person Prateek Pande    schedule 09.01.2021