任何告诉Kotlin编译器先前可调用函数已经对null进行检查的方法

如果我有一个代码片段

val myNullableString : String? val resultingString = if (myNullableString.isNullOrBlank()) myNullDefaultString else String.format(myNullableString!!, someOtherString) 

我必须使用myNullableString!!String.format()因为编译器将无法弄清楚isNullOrBlank()包括一个空检查。 这是正确的还是有什么办法告诉编译器,一个函数将推断该实例不是null?

没有看到任何提及有办法告诉编译器这样的信息,但这里是一个解决方法:如果字符串为空,并且使用let?。{}之后函数返回null

 inline fun String?.nullIfBlank(): String? = if (this?.isBlank() ?: true) null else this val resultingString: String = myNullableString.nullIfBlank()?.let { String.format(it) } ?: myNullDefaultString 

编译器只能在显式检查表达式之后执行从可空类型到非可空类型的智能转换,如myNullableString != null

Interesting Posts