tgoop.com/mobileproglib/6266
Create:
Last Update:
Last Update:
reified — это ключевое слово, которое может быть использовано только в inline-функциях. reified
позволяет получить информацию о типе generic-параметра во время выполнения программы. В обычном случае, информация о типах стирается и недоступна во время выполнения, но с помощью reified
можно сохранять эту информацию и использовать в других частях приложения.
Несколько простых примеров применения:
1. Получить доступ к типу параметра во время выполнения
fun main() {
printType<String>() // String
printType<Int>() // Int
}
private inline fun <reified T> printType() {
println(T::class.simpleName)
}
В этом примере мы определяем функцию
printType()
с типовым параметром T
, который мы указываем с помощью reified
. Внутри функции мы можем получить тип T
во время выполнения, используя T::class
. Затем выводим название типа на экран с помощью simpleName
. Когда мы вызываем функцию printType()
с типом String
или Int
, она выводит соответствующий тип на экран.2.
reified
вместе с is
для проверки типа аргумента во время выполненияfun main() {
println(isOfType<Int>(1)) // true
println(isOfType<Int>("Hello")) // false
}
private inline fun <reified T> isOfType(value: Any): Boolean {
return value is T
}
Здесь мы определяем функцию
isOfType()
, которая принимает значение типа Any
и возвращает true
, если оно является типом T
. Мы используем reified
, чтобы получить доступ к типу T
во время выполнения. Затем мы используем оператор is
для проверки типа значения и возвращаем соответствующее boolean значение.3. Получить список элементов перечисления
enum class Color { RED, GREEN, BLUE }
fun main() {
printEnumValues<Color>() // RED, GREEN, BLUE
}
private inline fun <reified T : Enum<T>> printEnumValues() {
enumValues<T>().forEach { value ->
println(value)
}
}
Определяем функцию
printEnumValues()
, которая выводит список элементов перечисления типа T
. Мы применяем reified
, чтобы получить доступ к типу T
во время выполнения. Затем используем enumValues<T>()
, чтобы получить список всех значений перечисления типа T
. Внутри цикла выводим каждое значение на экран. Когда мы вызываем функцию printEnumValues()
с типом Color
, она выводит "RED", "GREEN" и "BLUE" в консоль.#буст #JuniorKit #Kotlin