Android_Question icon indicating copy to clipboard operation
Android_Question copied to clipboard

kotlin中扩展函数的弊端?

Open whatshappen opened this issue 5 years ago • 2 comments

whatshappen avatar Apr 17 '19 01:04 whatshappen

没有弊端啊?

Skiiyis avatar Apr 19 '19 02:04 Skiiyis

没有弊端啊? 扩展不能真正的修改他们所扩展的类。通过定义⼀个扩展,你并没有在⼀个类中插⼊新成员,仅仅是可以通过该类型的变量⽤点表达式去调⽤这个新函数。 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,因为成员函数优先 }

whatshappen avatar Apr 22 '19 06:04 whatshappen