gpt4 book ai didi

kotlin - 检查 when() 语句中的值是否不相等

转载 作者:行者123 更新时间:2023-12-02 12:53:01 26 4
gpt4 key购买 nike

是否可以在 when 语句中测试字符串是否不相等?

这当然完全可以用一个简单的 if 语句来实现:

val storedValue = sharedPreferences.getString(identifier, NOT_SET)
if (storedValue != NOT_SET) {
super.setValue(storedValue)
}

但是,我喜欢 storedValue范围在此代码段中的 when 语句内:
when (val storedValue = sharedPreferences.getString(identifier, NOT_SET)) {
NOT_SET -> {}
else -> super.setValue(storedValue)
}

失败是 NOT_SET 的空代码块入口。
有没有可能将这两者结合起来?

我想范围 storedValue并摆脱空代码块。结果将类似于:
when (val storedValue = sharedPreferences.getString(identifier, NOT_SET)) {
!NOT_SET -> super.setValue(storedValue)
}

由于 SharedPreferences 是 Android 框架的一部分,这将是另一种解决方案:
if (sharedPreferences.contains(identifier)) {
super.setValue(sharedPreferences.getString(identifier, null))
}

但是,为了学习,我的问题的目标是更深入地了解 Kotlin 的可能性。

最佳答案

正如评论中所提到的,即使在 Kotlin 中,在 when 语句(尚未)中也不直接支持这样的否定。

目前最惯用的方式很可能是:

val storedValue = sharedPreferences.getString(identifier, NOT_SET)
when {
storedValue != "NOT_SET" -> super.setValue(storedValue)
}

另一个使用 !in 的工作变体在什么时候可以是例如:
when (val storedValue = sharedPreferences.getString(identifier, NOT_SET)) {
!in setOf("NOT_SET") -> super.setValue(storedValue)
}

!=!in将区分大小写,因此获取像 sharedPreferences.getString(identifier, NOT_SET).toUpperCase() 这样的字符串是有意义的, 或使用 equalsIgnoreCase在第一个变体中。

关于kotlin - 检查 when() 语句中的值是否不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56803803/

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