Kotlin学习手记——反射,安卓资深架构师分享学习经验及总结

本文介绍了Kotlin中的反射机制,详细讲解了如何获取类的成员属性、方法,以及如何获取泛型实参。特别讨论了`declared`与非`declared`方法的区别,并通过示例展示了获取接口泛型参数的方法。同时,文章提供了一个为数据类实现深拷贝的实用示例。
摘要由CSDN通过智能技术生成

}

}

class A(val name : String, sex: Boolean) : S(sex) {

fun String.hello(){

}

fun foo() {

}

var age : Int = 0;

}

fun A.test() {

}

上面的class A继承了一个类,并且类的内部有其他类定义的扩展方法,本身也定义了一个扩展方法。

KClass提供了很多方法获取类的属性和方法,但是有一些区别,方法比较多,可以看一下区别:

fun main() {

// 能得到:age, name, foo(), (String.)hello(), equals(), hashCode(), toString(), sex, superFun()

println(A::class.members) 获取所有的成员属性和方法,包括其他类的扩展方法,包括父类的方法,但不包括构造方法

// 能得到:foo(), (String.)hello(), equals(), hashCode(), toString(), superFun()

println(A::class.functions) 获取所有的方法, 包括扩展方法,包括父类的

// 能得到:age, name, sex

println(A::class.memberProperties) 获取所有的成员属性 非扩展, 包括父类

// 能得到:foo(), equals(), hashCode(), toString(), superFun()

println(A::class.memberFunctions) 获取所有的成员方法 非扩展, 包括父类

// 能得到:(String.)hello()

println(A::class.memberExtensionFunctions) 获取所有的扩展方法, 包括父类

// 能得到:[]

println(A::class.memberExtensionProperties) 获取所有的扩展属性, 包括父类

// 能得到:age, name

println(A::class.declaredMemberProperties) 获取到所有定义的属性 当前类

// 能得到:foo()

println(A::class.declaredMemberFunctions) 获取到所有定义的方法(普通方法,非扩展方法,非静态方法)当前类

// 能得到:age, name, foo(), (String.)hello()

println(A::class.declaredMembers) 获取到所有定义的成员包括属性和方法(普通方法和扩展方法)当前类

// 能得到:foo(), (String.)hello()

println(A::class.declaredFunctions) 获取到所有定义的方法(普通方法和扩展方法) 如果是java类可以获取父类的方法

// 能得到:(String.)hello()

println(A::class.declaredMemberExtensionFunctions) 获取定义在当前类的扩展方法

// 能得到:[]

println(A::class.declaredMemberExtensionProperties) 获取定义在当前类的扩展属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值