如何在Kotlin中执行一个空的非空字符串?

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

有一种更简单的方法来定义一个类型或扩展到String ,将强制该字符串不能为空?

如果你在多个地方需要这种行为,你可以创建一个委托来处理它,你可以在私有属性的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"