ВНИМАНИЕ: Запись на курсы по HTML, CSS, JavaScript, PHP, Python, React, Vue, Laravel и другим фреймворкам и CMS,
а также: помощь в поиске работы и заказов, стажировка на реальных проектах→
1265 of 1310 menu
Новый формат обучения! Репетиторство по программированию. Есть еще 3 свободных места! Жми для подробностей.

Ключевое слово reified

Ключевое слово reified используется в сочетании с ключевым словом inline для параметров типа в обобщенных функциях. Оно позволяет сохранять информацию о типе во время выполнения, что делает возможным проверку типа с помощью оператора is и приведение типа с помощью оператора as.

Синтаксис

inline fun <reified T> functionName(parameters): ReturnType { // тело функции с доступом к типу T во время выполнения }

Пример

Создадим функцию для проверки типа элемента:

inline fun <reified T> isType(value: Any): Boolean { return value is T } val str = "hello" val num = 42 val isString = isType<String>(str) val isInt = isType<Int>(num) val isDouble = isType<Double>(str) println("Is string: $isString") println("Is int: $isInt") println("Is double: $isDouble")

Результат выполнения кода:

Boolean true Boolean true Boolean false

Пример

Функция для фильтрации элементов определенного типа из списка:

inline fun <reified T> filterByType(list: List<Any>): List<T> { return list.filter { it is T }.map { it as T } } val mixedList = listOf(1, "apple", 2.5, "banana", 3, "cherry") val strings = filterByType<String>(mixedList) val integers = filterByType<Int>(mixedList) println("Strings: $strings") println("Integers: $integers")

Результат выполнения кода:

List<String> ["apple", "banana", "cherry"] List<Int> [1, 3]

Пример

Создание экземпляра класса с использованием рефлексии:

inline fun <reified T> createInstance(): T { return T::class.java.getDeclaredConstructor().newInstance() } class Person { override fun toString(): String = "Person object" } val person = createInstance<Person>() println(person)

Результат выполнения кода:

Person object

Пример

Проверка типа в расширениях для универсальных классов:

inline fun <reified T> List<*>.firstOfType(): T { return this.first { it is T } as T } val mixed = listOf(1, "first", 2, "second", 3) val firstString = mixed.firstOfType<String>() println("First string: $firstString")

Результат выполнения кода:

String "first"

Ограничения

Ключевое слово reified имеет несколько ограничений:

  • Может использоваться только с inline функциями
  • Не может быть применено к свойствам или классам
  • Не может использоваться с nullable типами через ?
  • Не поддерживает проверку на null для типа параметра

Смотрите также

  • class,
    основы создания классов в Kotlin