枚舉類成員
import kotlin.reflect.full.memberFunctions import kotlin.reflect.full.memberProperties fun main(arg: Array<String>) { val p = Person::class //類引用 println("成員列表(屬性和函數)" + p.members.size) for (member in p.members) { println(member.name + " " + member.returnType) } println("屬性個數" + p.memberProperties.size) for (member in p.memberProperties) { println(member.name + " " + member.returnType) } println("函數個數" + p.memberFunctions.size) for (member in p.memberFunctions) { println(member.name + " " + member.returnType) } } class Person(val value: String, val num: Int) { fun process() { } }
輸出:
成員列表(屬性和函數)6
num kotlin.Int
value kotlin.String
process kotlin.Unit
equals kotlin.Boolean
hashCode kotlin.Int
toString kotlin.String
屬性個數2
num kotlin.Int
value kotlin.String
函數個數4
process kotlin.Unit
equals kotlin.Boolean
hashCode kotlin.Int
toString kotlin.String
動態調用成員函數
fun main(arg: Array<String>) { val p = Person::process //類引用 //調用invoke函數執行process函數 p.invoke(Person("abc",20)) //利用java的反射機制指定process方法的名字 val method = Person::class.java.getMethod("process") //動態調用process函數 method.invoke(Person("tom",25)) } class Person(val value: String, val num: Int) { fun process() { println("value $value num $num") } }
動態調用成員屬性
fun main(arg: Array<String>) { val person = Person() //獲取屬性對象 val name = Person::name //讀取屬性值 println(name.get(person)) //設置屬性值 name.set(person, "new") println(name.get(person)) } class Person() { var name: String = "tom" get() = field set(value) { field = value } }