kotlin反射代码示例,覆盖常用场景,不定期补充完善
data class User(var name: String, var age: Int, var desc: String) {
fun toCString() : String{
return "[override toString] ${toString()}"
}
}
import kotlin.reflect.full.declaredMemberProperties
//reflection sample
fun main(args: Array<String>){
//1,反射data
var user = User("小明", 18, "我是一名学生")
println("//1,反射data")
println(user)
//2,反射构造函数
var mWang = ::User.call("小王", 20, "我是一个演员")
println("//2,反射构造函数")
println(mWang)
//3,反射属性
user::name.set("王小明")
println("3,反射属性")
println(user)
println("User field desc's name is ${User::desc.name}")
//4,循环遍历字段
println("//4,循环遍历字段")
User::class.declaredMemberProperties.forEach {
println("field name ${it.name}, type ${it.returnType}, value ${it.get(user)}")
}
//5,反射函数
var func = User::toCString
println("//5,反射函数")
println("execute fun ${func.call(user)}")
}
执行结果
//1,反射data
User(name=小明, age=18, desc=我是一名学生)
//2,反射构造函数
User(name=小王, age=20, desc=我是一个演员)
3,反射属性
User(name=王小明, age=18, desc=我是一名学生)
User field desc's name is desc
//4,循环遍历字段
field name age, type kotlin.Int, value 18
field name desc, type kotlin.String, value 我是一名学生
field name name, type kotlin.String, value 王小明
//5,反射函数
execute fun [override toString] User(name=王小明, age=18, desc=我是一名学生)