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, "我是一名學(xué)生")
println("http://1,反射data")
println(user)
//2,反射構(gòu)造函數(shù)
var mWang = ::User.call("小王", 20, "我是一個演員")
println("http://2,反射構(gòu)造函數(shù)")
println(mWang)
//3,反射屬性
user::name.set("王小明")
println("3,反射屬性")
println(user)
println("User field desc's name is ${User::desc.name}")
//4,循環(huán)遍歷字段
println("http://4,循環(huán)遍歷字段")
User::class.declaredMemberProperties.forEach {
println("field name ${it.name}, type ${it.returnType}, value ${it.get(user)}")
}
//5,反射函數(shù)
var func = User::toCString
println("http://5,反射函數(shù)")
println("execute fun ${func.call(user)}")
}
執(zhí)行結(jié)果
//1,反射data
User(name=小明, age=18, desc=我是一名學(xué)生)
//2,反射構(gòu)造函數(shù)
User(name=小王, age=20, desc=我是一個演員)
3,反射屬性
User(name=王小明, age=18, desc=我是一名學(xué)生)
User field desc's name is desc
//4,循環(huán)遍歷字段
field name age, type kotlin.Int, value 18
field name desc, type kotlin.String, value 我是一名學(xué)生
field name name, type kotlin.String, value 王小明
//5,反射函數(shù)
execute fun [override toString] User(name=王小明, age=18, desc=我是一名學(xué)生)