Вложенные дженерики Java с необработанными типами, вывод типа возврата ⇐ JAVA
Вложенные дженерики Java с необработанными типами, вывод типа возврата
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, если это важно.
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, если это важно.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Оберните диапазон, определенный необработанными указателями, в правильный итератор.
Anonymous » » в форуме C++ - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-