在整个代码中使用kotlin扩展是个好主意吗?
我很想念iOS上的扩展,但这是在android中使用这些东西的好方法吗? 参考http://antonioleiva.com/kotlin-android-extension-functions/
对此有更好的解决方案吗?
答案 0 :(得分:4)
Kotlin中的扩展函数被编译为普通的Java方法。例如,当您在包中定义一个函数时,它将变成Java类中的静态方法。与简单地调用静态实用程序
相比,没有任何开销答案 1 :(得分:1)
为了稍微扩展一下Andrey Breslav的答案,Kotlin扩展功能确实可以编译为静态java方法,因此大多数通用扩展功能都不会产生开销。但是有一个极端的情况需要注意,How do I use performance counters inside of the kernel?的前几分钟Jake Wharton会发出声音。
也就是说,当您传递高阶函数(lambda)作为扩展函数的参数时,如下所示:
fun View.doSomething(block: () -> Unit) {
//do something
}
此代码会降低性能,因为内部的lambda必须在内部创建一个匿名类,这可能会消耗方法并导致类加载。这是一个非常简单的修复,只需在函数中添加inline
关键字,该关键字实际上会将您的代码内联到所有这些调用站点函数中,因此您不会在每次扩展时都受到性能影响函数被调用。
inline fun View.doSomething(block: () -> Unit) {
//do something
}