使用Lambda重构Kotlin方法

帕特里克·菲茨杰拉德

我有以下emun类代表我的导航栏视图。

enum class NavigationPosition(val position: Int, val id: Int) {
    HOME(0, R.id.nav_home),
    SEARCH(1, R.id.nav_search),
    PROFILE(2, R.id.nav_profile),
    SETTINGS(3, R.id.nav_settings);
}

我目前正在使用以下方法按位置进行反向查找

fun getByPosition(position: Int): NavigationPosition = when (position) {
    0 -> NavigationPosition.HOME
    1 -> NavigationPosition.SEARCH
    2 -> NavigationPosition.PROFILE
    3 -> NavigationPosition.SETTINGS
    else ->  NavigationPosition.HOME
}

var navigationPosition = getByPosition(position)

我可以getByPosition使用Kotlin lambda或扩展函数来重构吗?

佐伊

如前所述,您可以使用NavigationPosition.values()但是,当前提出的方法不是有效的存储器。值函数创建每次调用的时候一个新的数组我强烈建议您将其缓存在静态变量中,以确保每次调用时都不会初始化它,因为这样做效率不高。

将比较方法与缓存方法结合起来,可以在枚举内部使用一个伴随对象。现在,就像我说的那样,在这里缓存值是最好的选择,因此,除了一个方法(在其他两个答案中都提到过)之外,您还创建了一个包含值的字段,以避免每次调用时都重新调用它方法。

companion object {
    private val values = values()
    fun getPositionById(id: Int) = if(id < values.size && id >= 0) values[i] else HOME
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章