[英]How to return boolean value from a function in Kotlin
我是kotlin的新手。 我正在kotlin程序中读取属性文件中的键和值。 但我不知道如何直接返回一个键的值。 请在下面找到application.yml和abc.class(这是一个kotlin类)。
application.yml
abcconfig:
isabcEnabled:
default: false
xyz: true
def: true
abc.class
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.stereotype.Component
@Component
@ConfigurationProperties(prefix = "abcconfig")
class AbcConfig {
private var abcEnabled: Map<String, Boolean> = mutableMapOf()
fun getabcEnabledValue(siteId: String?): Boolean {
val abc: Boolean
val key: String? = if (abcEnabled.containsKey(key)) key else "default"
abc = abcEnabled[key]
return abc
}
fun setAbcEnabled(abcEnabled: Map<String, Boolean>) {
this.abcEnabled = abcEnabled
}
}
这是关于可空性的。 Kotlin编译器会跟踪每个值是否为null,并阻止您执行不安全的操作。
此问题中的代码具有一个特定的可空性问题。 (它也有一些混乱,包括在设置之前对key
两次引用。我假设那些应该是siteId
。)
问题是当abcEnabled
映射不包含请求的密钥时会发生什么。 如果密钥存在,则[…]
运算符将返回相应的Boolean
值; 但是如果密钥不存在(如果映射不包含“默认”密钥可能会发生),则返回null。 但是,您尝试将其赋值给的变量是Boolean
类型,它不允许空值。 这就是编译器抱怨的原因。
因此,如果地图不包含“默认”键,您必须决定要发生什么。 (或者找到一种方法来确保它始终如此;但这要困难得多,特别是如果可以在对象完全初始化之前调用该方法,或者在另一个线程设置或更新地图时调用该方法。因此处理案例更加安全优雅。)
如果你想在这种情况下返回false
,代码可以归结为:
fun getabcEnabledValue(siteId: String?): Boolean {
val key: String? = if (abcEnabled.containsKey(siteId)) siteId else "default"
return abcEnabled[key] ?: false
}
甚至(为了更好的线程安全性以及简洁和清晰度):
fun getabcEnabledValue(siteId: String?)
= abcEnabled[siteId] ?: abcEnabled["default"] ?: false
或者如果你想在这种情况下返回null
,只需将该函数声明为返回Boolean?
(允许null) - 或者在最后一个例子中?: false
。
(另外,作为一种风格问题,我不确定你为什么把abcEnabled
变成私人财产,然后添加了你自己的setter。是否真的有必要隐藏吸气剂?如果没有,公共财产会更简单。它可能值得在方法名称abc
的大写一致。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.