Вложенные дженерики Java с необработанными типами, вывод типа возвратаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Вложенные дженерики Java с необработанными типами, вывод типа возврата

Сообщение Anonymous »


public class Main { Список f0() { вернуть List.of(List.of(1L)); } Список f1() { return List.of((List) List.of(1L)); } Список f2() { var r = List.of((Список) List.of(1L)); вернуть р; } Список f3() { return List.of((List) List.of(1L), List.of(1L)); } Список f4() { return List.of((List) List.of(1L), (List) List.of(1L)); } } В приведенном выше коде f1 и f4 компилируются, а f0, f2 и f3< /code> нет.
Я понимаю, почему f0 не компилируется: ему нужен List, но он видит List . Но я понятия не имею, почему другие ведут себя именно так.

f2:

несовместимые типы: List невозможно преобразовать в List f3:

ошибка: несовместимые типы: переменная вывода E имеет несовместимые границы return List.of((List) List.of(1L), List.of(1L)); ^ ограничения равенства: целое число нижние границы: Длинный где E — переменная типа: E расширяет объект, объявленный в методе of(E) Какой именно тип возвращаемого выражения содержится в каждой функции? Почему Java ведет себя так? А что происходит по JLS? Я использую Java 17, если это важно.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»