Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtSpGnCv 9 of 224 menu
◀ ▶

Ковариантный список в Dart

Список в Dart ковариантен по элементу: List<int> можно передать туда, где ожидают List<Object>, потому что каждый int является объектом. Чтение из такого списка безопасно.

Запись через более широкий тип не запрещает позже добавить элемент другого вида - тогда программа остановится с ошибкой времени выполнения:

void printSizes(List<Object> items) { print(items.length); } final nums = [1, 2, 3]; printSizes(nums);

Ковариантность упрощает передачу готовых списков в общие функции, но добавление «чужого» значения в список с узким типом элементов через широкую ссылку ломает ожидания типа.

Дан следующий код:

class Employee { final String name; Employee(this.name); } void showNames(List<Object> rows) { for (final row in rows) { print(row); } } final team = [Employee("ann"), Employee("bob")];

Передайте team в showNames и выведите два имени через цикл.

Дан следующий код:

final numbers = <int>[1, 2]; List<Object> wide = numbers;

Сначала вызовите numbers.add(3) и выведите длину списка. Затем попробуйте wide.add("x") и запустите программу - убедитесь, что появляется ошибка времени выполнения.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить