Android_Question
Android_Question copied to clipboard
kotlin中扩展函数的弊端?
没有弊端啊?
没有弊端啊? 扩展不能真正的修改他们所扩展的类。通过定义⼀个扩展,你并没有在⼀个类中插⼊新成员,仅仅是可以通过该类型的变量⽤点表达式去调⽤这个新函数。 open class C class D: C() fun C.foo() = "c" //类C的扩展函数 fun D.foo() = "d" //类D的扩展函数 fun printFoo(c: C) { //扩展函数根据函数调用所在的表达式类型决定的,c是C类型的,所以传入D类的对象,也会调用的是C类的扩展函数 println(c.foo()) }
fun main(args: Array<String>) { printFoo(D()) //传入的虽然是D类的对象,但是声明的是C类的引用,所以调用的是C类扩展 } 打印结果是‘c’
如果当前类有个同样的方法,会调用自己的方法,不会调用扩展函数: class C { fun foo() { println("member") } } fun C.foo() { println("extension") }
fun main(args: Array<String>) { var c = C() c.foo() //输出的只会是member,不会是extendsion,因为成员函数优先 }