gpt4 book ai didi

java - Kotlin 'when' 语句与 Java 'switch'

转载 作者:IT老高 更新时间:2023-10-28 13:40:54 26 4
gpt4 key购买 nike

Kotlin 中的模式匹配很好,而且它不会执行下一个模式匹配这一事实在 90% 的用例中都很好。

在 Android 中,当数据库更新时,如果我们不设置中断以使代码看起来像这样,我们会使用 Java 开关属性继续下一个案例:

switch (oldVersion) {
case 1: upgradeFromV1();
case 2: upgradeFromV2();
case 3: upgradeFromV3();
}

因此,如果某人拥有 DB 版本 1 的应用,但错过了 DB v2 的应用版本,他将执行所有需要的升级代码。

转换为 Kotlin,我们会遇到这样的困惑:

when (oldVersion) {
1 -> {
upgradeFromV1()
upgradeFromV2()
upgradeFromV3()
}
2 -> {
upgradeFromV2()
upgradeFromV3()
}
3 -> {
upgradeFromV3()
}
}

这里我们只有 3 个版本,想象一下当 DB 达到 19 版时。

无论如何,当以相同的方式行事时,然后切换?我试图继续没有运气。

最佳答案

简单但冗长的解决方案是:

if (oldVersion <= 1) upgradeFromV1()
if (oldVersion <= 2) upgradeFromV2()
if (oldVersion <= 3) upgradeFromV3()

function references 的另一种可能解决方案| :

fun upgradeFromV0() {}
fun upgradeFromV1() {}
fun upgradeFromV2() {}
fun upgradeFromV3() {}

val upgrades = arrayOf(::upgradeFromV0, ::upgradeFromV1, ::upgradeFromV2, ::upgradeFromV3)

fun upgradeFrom(oldVersion: Int) {
for (i in oldVersion..upgrades.lastIndex) {
upgrades[i]()
}
}

关于java - Kotlin 'when' 语句与 Java 'switch',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45826403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com