我经常想要一个不能为空或空白的字符串 - 空格不够好。编译器很好地处理aNullableString.isNullOrBlank()
以防止null,我们可以使用String
来检查它是否为空或空白。但是,这需要在使用的任何地方处理空白检查,如果是空白则处理错误,如果您错过了某个位置,可能会导致意外错误。
是否有更简单的方法来定义{{1}}的类型或扩展名,以强制字符串不能为空?
答案 0 :(得分:4)
如果您需要在多个地方使用此行为,您可以创建一个委托来处理它,您可以在私有属性的setter或setValue
函数中进行检查:
class NonEmptyString(private var str: String) {
init {
if (str.isEmpty()) {
throw IllegalArgumentException("Invalid initial value")
}
}
operator fun getValue(thisRef: Any?, property: KProperty<*>) = str
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
if (value.isEmpty()) {
return // or throw or something
}
str = value
}
}
使用它看起来像这样:
var nonEmpty by NonEmptyString("something")
nonEmpty = ""
println(nonEmpty) // "something"