Введение в рефлексию в Kotlin
Рефлексия - способ спросить у уже описанного типа,
как он называется и из чего состоит, когда обычный вызов
метода ещё не нужен. На JVM это опирается на метаданные
собранного class-файла; в Kotlin те же данные доступны
через пакет kotlin.reflect.
У каждого класса есть литерал вида ИмяТипа::class.
Выражение не создаёт объект - оно возвращает описание
типа, с которым дальше работают как с обычным значением:
class Parcel(val id: Int)
fun main() {
val kind = Parcel::class
println(kind)
}
Печать такого значения даёт служебную строку с полным
именем на JVM. Для человека удобнее свойство
simpleName - короткое имя без пакета:
class Parcel(val id: Int)
fun main() {
val kind = Parcel::class
println(kind.simpleName)
}
Тот же приём работает и для встроенных типов: достаточно
написать String::class или Int::class
в любом месте программы. Так проверяют, с каким классом
столкнулся код, не завязываясь на конкретный экземпляр.
Одной ссылки на класс хватает, чтобы понять идею темы: программа читает описание типа изнутри, ещё до работы с конкретным экземпляром в памяти.