【问题标题】:Kotlin extension overhead for AndroidAndroid 的 Kotlin 扩展开销
【发布时间】:2015-04-12 22:10:09
【问题描述】:

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

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

  2. 有没有更好的解决方案?

【问题讨论】:

    标签: android system.reactive kotlin


    【解决方案1】:

    Kotlin 中的扩展函数被编译为普通的 Java 方法。例如,当您在包中定义一个函数时,它会变成 Java 类中的静态方法。与简单地调用静态实用程序相比,没有任何开销

    【讨论】:

    • 最好将Kotlin 仅用于现有Android Java project 的扩展?
    • 是的。我建议你使用我自己的librarykotlin's one
    【解决方案2】:

    为了进一步扩展 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 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      相关资源
      最近更新 更多