kotlin成员函数的所有者

kotlin可以获得函数的所有者和绑定的对象相关的信息. 假设有下面两个类:

class A(){
       fun fa(){}
 }
 class B: A()

val KFunction<*>.ownerClass: KClass<*> get() {       
        return (this as FunctionReference).owner as KClass<*>
}

 可以通过KFunction.ownerClass来获取所有者类型, 下面是测试结果:

A::fa.ownerClass => A::class
 A()::fa.ownerClass => A::class
 B::fa.ownerClass => B::class
 B()::fa.ownerClass => B::class

这在web开发中有用, 假设一个类是控制器

class PersoController:Controller(){
        fun listAction(){
        }
}

重定向的函数可以这么写

redirect(PersonController::listAction)

 为什么不直接用字符串呢? 比如: redirect("person/list"). 

字符串在重构时容易落下, 减少犯错误的几率就是提高效率. 

ruby中也常用符号来代替字符串.

相关推荐