【问题标题】:when(view) vs. switch(view.getId()) with Kotlin Android Extensions使用 Kotlin Android 扩展的 when(view) 与 switch(view.getId())
【发布时间】:2019-09-01 14:21:12
【问题描述】:

我对 Android 和 Kotlin 开发相当陌生,目前正在学习最初为 Java 编写的教程。其中经常出现如下模式:

void onSomething(View v) {
  switch(v.getId()) {
  case R.id.btn1:
    ...
  }    
}

但是我在我的项目中使用 Kotlin 和 Kotlin Android 扩展,它允许编写如下开关:

fun onSomething(v: View) {
  when (v) {
    btn1 -> { ... }
  }
}

最后一个对我来说似乎更具可读性,但据我了解,在后台,KAE 将这个方便的 UI 标识符的访问转换为一种用哈希表实现的缓存。这可能需要有点比比较整数更繁重,具体取决于实现。我完全支持可读的代码,但想更好地理解 KAE 的底层魔力。

所以考虑到这一点,

1) 在开关中使用View 引用而不是 ID 在 Kotlin / KAE 中是一种好习惯吗?

2) 除了过早优化之外,它是否会对我的应用的性能或内存占用产生负面影响?

【问题讨论】:

    标签: android kotlin kotlin-android-extensions


    【解决方案1】:

    在开关中使用视图引用而不是 ID 是一种很好的做法 Kotlin / KAE?

    好吧,when 语句相当于 Kotlin 的 switch 语句。

    为了让您更清楚,您没有理由不能这样做:

    fun onSomething(v: View) {
        when (v.id) {//do a switch on the id instead of the entire object
            R.id.something -> { ... }
        }
    }
    

    回答您的问题:

    它可能会影响我的应用的性能或内存占用吗 以消极的方式,过早优化不谈?

    我认为这两种方式都不会真正影响性能,以至于您会注意到它或它实际上会很重要。如果我不得不猜测,我会说 id 的整数比较会比整个对象的比较更好。

    【讨论】:

    • 在 when() 中使用 View 对象时,检查比较的是哪一个?视图或整个对象的引用?
    猜你喜欢
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 2016-06-16
    • 2020-09-10
    • 2014-06-23
    相关资源
    最近更新 更多