Обобщённые классы и методы
Параметризация собственных типов
«Обобщённые классы и методы» — бесплатный урок Dart Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.
Ваши собственные обобщённые типы
Встроенные типы, такие как List, являются обобщёнными, и Вы тоже можете создавать свои. Параметр типа позволяет Вашему классу адаптироваться к любому типу, который выберет вызывающий код. 🧩
Имя параметра типа
Вы добавляете параметр типа в угловых скобках после имени класса. Буква T — распространённый заполнитель, обозначающий настоящий тип.
class Box<T> {
T value;
Box(this.value);
}Использование T внутри класса
Внутри класса T ведёт себя как любое имя типа. Вы можете использовать его для полей, параметров и возвращаемых значений во всём теле класса.
class Box<T> {
T value;
Box(this.value);
T get() => value;
}Подстановка типа
При создании объекта Вы выбираете настоящий тип. Здесь T становится int, поэтому этот контейнер может содержать только целые числа.
var b = Box<int>(42);
int n = b.get();Позвольте Dart вывести тип
Часто явный тип можно не указывать, поскольку Dart считывает его из аргумента. Вывод типа видит String и сам задаёт T.
var b = Box('hi');Несколько параметров типа
Класс может принимать больше одного параметра типа, разделённого запятыми. Класс Pair, содержащий значения двух разных типов, — классический пример.
class Pair<A, B> {
A first;
B second;
Pair(this.first, this.second);
}Обобщённые методы
Вы также можете сделать обобщённым один метод, даже если сам класс не является обобщённым. Поместите параметр типа непосредственно перед списком параметров.
T firstOf<T>(List<T> items) => items[0];Методы тоже выводят тип
Обобщённый метод обычно выводит свой тип из переданных аргументов. Вызовите его как обычно, а Dart определит остальное.
var n = firstOf([1, 2, 3]);
var s = firstOf(['a', 'b']);Безопасность типов возвращается
Поскольку метод отслеживает T, результат сохраняет правильный тип. Вызов firstOf для списка String возвращает String, и приводить тип не нужно.
String x = firstOf(['a', 'b']);Повторное использование без дублирования
Одно обобщённое определение заменяет множество скопированных вариантов. Вы пишете логику один раз, и она одинаково работает с int, String и любым пользовательским типом.
Выбирайте понятные имена
Однобуквенные имена вроде T, E или K являются общепринятыми, но описательное имя может помочь. В сложном коде ясность важнее краткости.
Быстрая проверка
Где у класса указывается параметр типа?
Итоги
Вы научились добавлять параметр типа, например T, в собственные классы и методы. Dart подставляет его, часто с помощью вывода типа, сохраняя код повторно используемым и безопасным. ✅
Часто задаваемые вопросы
Урок «Обобщённые классы и методы» бесплатный?
Да — полный текст урока «Обобщённые классы и методы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.
Чему я научусь в уроке «Обобщённые классы и методы»?
Параметризация собственных типов Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Dart Academy?
Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Обобщённые классы и методы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Dart Academy?
Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Почему обобщения лучше dynamic
- Обобщённые классы и методы
- Ограниченные параметры типов с extends
- Обобщённые коллекции на практике