如何在Kotlin中强制执行一个空的非null String?

时间:2017-07-24 16:30:33

标签: kotlin

我经常想要一个不能为空或空白的字符串 - 空格不够好。编译器很好地处理aNullableString.isNullOrBlank()以防止null,我们可以使用String来检查它是否为空或空白。但是,这需要在使用的任何地方处理空白检查,如果是空白则处理错误,如果您错过了某个位置,可能会导致意外错误。

是否有更简单的方法来定义{{1}}的类型或扩展名,以强制字符串不能为空?

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"