Kotlin中反射
枚举类成员
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 } }
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!
posted on 2018-12-20 14:31 LoaderMan 阅读(2000) 评论(0) 编辑 收藏 举报