我有以下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] 删除。
我来说两句