}
}
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) 获取定义在当前类的扩展属性