【发布时间】:2015-04-12 22:10:09
【问题描述】:
在整个代码中使用 kotlin 扩展是个好主意吗?
我错过了很多来自 iOS 的扩展,但这是在 android 中使用这些东西的好方法吗? 参考http://antonioleiva.com/kotlin-android-extension-functions/
有没有更好的解决方案?
【问题讨论】:
标签: android system.reactive kotlin
在整个代码中使用 kotlin 扩展是个好主意吗?
我错过了很多来自 iOS 的扩展,但这是在 android 中使用这些东西的好方法吗? 参考http://antonioleiva.com/kotlin-android-extension-functions/
有没有更好的解决方案?
【问题讨论】:
标签: android system.reactive kotlin
Kotlin 中的扩展函数被编译为普通的 Java 方法。例如,当您在包中定义一个函数时,它会变成 Java 类中的静态方法。与简单地调用静态实用程序相比,没有任何开销
【讨论】:
Kotlin 仅用于现有Android Java project 的扩展?
为了进一步扩展 Andrey Breslav 的回答,Kotlin 扩展函数确实编译为静态 java 方法,因此大多数通用扩展函数没有开销。但是,您需要注意一个极端情况,即 Jake Wharton 在this talk at Google IO 的前几分钟就提出来了。
即当您将高阶函数 (lambdas) 作为参数传递给扩展函数时,如下所示:
fun View.doSomething(block: () -> Unit) {
//do something
}
这段代码会影响性能,因为 lambda 在底层必须创建一个匿名类,它会占用方法并导致类加载。这是一个非常简单的修复方法,只需将 inline 关键字添加到函数中,这实际上会将您的代码 内联 到所有此调用站点函数中,因此每次扩展函数时您都不会受到性能影响调用。
inline fun View.doSomething(block: () -> Unit) {
//do something
}
【讨论】: