我是Kotlin的新手,我正在寻找建议,以更优雅的方式重写以下代码。
var s: String? = "abc"
if (s != null && s.isNotEmpty()) {
// Do something
}
如果我使用以下代码:
if (s?.isNotEmpty()) {
编译器会抱怨
Required: Boolean
Found: Boolean?
感谢。
答案 0 :(得分:24)
您可以像这样使用isNullOrEmpty
或其朋友isNullOrBlank
:
if(!s.isNullOrEmpty()){
// s is not empty
}
isNullOrEmpty
和isNullOrBlank
都是CharSequence?
上的扩展方法,因此您可以使用null
安全地使用它们。或者将null
变为false,如下所示:
if(s?.isNotEmpty() ?: false){
// s is not empty
}
您也可以执行以下操作
if(s?.isNotEmpty() == true){
// s is not empty
}
答案 1 :(得分:3)
虽然我非常喜欢@miensol的答案,但我的回答是(这就是为什么我不把它放在评论中):if (s != null && s.isNotEmpty()) { … }
实际上 是惯用的方式在Kotlin。只有通过这种方式,您才能在块中获得String
的智能强制转换,而在接受的答案中,您必须在块内使用s!!
。
答案 2 :(得分:0)
或创建一个扩展方法并将其用作安全呼叫:
fun String?.emptyToNull(): String? {
return if (this == null || this.isEmpty()) null else this
}
fun main(args: Array<String>) {
val str1:String?=""
val str2:String?=null
val str3:String?="not empty & not null"
println(str1.emptyToNull()?:"empty string")
println(str2.emptyToNull()?:"null string")
println(str3.emptyToNull()?:"will not print")
}