Kotlin学习笔记(1)Kotlin反射(reflection)代码示例

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){
    //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=我是一名学生)

你可能感兴趣的:(Kotlin学习笔记(1)Kotlin反射(reflection)代码示例)