Найти в Дзене
Android Head First

Kotlin. Дженерики (Generics)

Дженерики (Generics) - это механизм в языке программирования Kotlin, который позволяет создавать обобщенные классы, интерфейсы и функции. Дженерики позволяют создавать компоненты, которые могут работать с разными типами данных, сохраняя при этом безопасность типов.

В Kotlin дженерики объявляются с использованием угловых скобок (`<T>`), где `T` - это типовой параметр, который может быть заменен на конкретный тип данных при использовании обобщенного компонента. Например, можно создать обобщенный класс `Box`, который может содержать элементы различных типов:

-2

В этом примере `T` - это типовой параметр класса `Box`. При создании экземпляра `Box` можно указать конкретный тип данных, который будет использоваться вместо `T`. Например:

-3

Теперь `boxOfIntegers` содержит целое число, а `boxOfStrings` содержит строку.

Ключевое слово `reified` в Kotlin используется в контексте дженериков и применяется к типовому параметру функции. Оно указывает, что типовой параметр должен быть доступен во время выполнения (runtime), что обычно не разрешено для типовых параметров дженериков из-за стирания типов.

Когда типовой параметр функции помечен как `reified`, мы можем получить информацию о его типе во время выполнения. Это особенно полезно, когда мы хотим использовать рефлексию или выполнять проверки типов внутри обобщенной функции.

Вот пример использования ключевого слова `reified`:

-4

В этом примере функция `printType` является обобщенной с типовым параметром `T`, помеченным как `reified`. Внутри функции мы используем `T::class` для получения информации о классе типового параметра. Затем мы выводим простое имя класса на консоль.

Благодаря ключевому слову `reified` мы можем получить доступ к информации о типе во время выполнения функции. Без `reified` это было бы невозможно, так как типовые параметры дженериков обычно стираются во время компиляции.

Важно отметить, что ключевое слово `reified` может использоваться только с `inline` функциями, так как `inline` функции копируют свое тело в вызывающий код во время компиляции.