Android的Kotlin扩展开销

时间:2015-04-12 22:10:09

标签: android system.reactive kotlin

在整个代码中使用kotlin扩展是个好主意吗?

  1. 我很想念iOS上的扩展,但这是在android中使用这些东西的好方法吗? 参考http://antonioleiva.com/kotlin-android-extension-functions/

  2. 对此有更好的解决方案吗?

2 个答案:

答案 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 
}