Члены класса в Kotlin
Ссылка ::class описывает тип целиком. Чтобы увидеть
объявленные в классе свойства и функции, к ней подключают
расширения из kotlin.reflect.full - отдельная
часть библиотеки рефлексии Kotlin.
Список свойств, объявленных в теле класса, даёт
memberProperties. У каждого элемента есть
name - его и печатают по очереди:
import kotlin.reflect.full.memberProperties
class Ledger(val code: String, val balance: Int)
fun main() {
for (prop in Ledger::class.memberProperties) {
println(prop.name)
}
}
Функции, объявленные в классе, перечисляет
memberFunctions. Имена снова берут из
name, порядок следует объявлению в исходнике:
import kotlin.reflect.full.memberFunctions
class Ledger(val code: String, val balance: Int) {
fun isEmpty(): Boolean = balance == 0
fun label(): String = code
}
fun main() {
for (fn in Ledger::class.memberFunctions) {
println(fn.name)
}
}
Оба списка можно обойти в одном входе в программу - сначала свойства, затем функции:
import kotlin.reflect.full.memberFunctions
import kotlin.reflect.full.memberProperties
class Ledger(val code: String, val balance: Int) {
fun isEmpty(): Boolean = balance == 0
}
fun main() {
val kind = Ledger::class
for (prop in kind.memberProperties) {
println("prop:" + prop.name)
}
for (fn in kind.memberFunctions) {
println("fn:" + fn.name)
}
}
Опишите класс Route с двумя свойствами
в первичном конструкторе и одной функцией без
параметров. Выведите имена всех свойств и всех
функций через рефлексию.
Сделайте класс Widget с одним строковым
свойством и двумя функциями с разными именами.
Напечатайте только имена функций, свойства
в этот раз не выводите.