如何在Kotlin中习惯性地测试非空,非空字符串?

我是Kotlin的新手,我正在寻找建议,将下面的代码改写成更优雅的方式。

var s: String? = "abc" if (s != null && s.isNotEmpty()) { // Do something } 

如果我使用下面的代码:

 if (s?.isNotEmpty()) { 

编译器会抱怨

 Required: Boolean Found: Boolean? 

谢谢。

您可以使用isNullOrEmpty或其朋友isNullOrBlank像这样:

 if(!s.isNullOrEmpty()){ // s is not empty } 

CharSequence?扩展方法都是isNullOrEmptyisNullOrBlank CharSequence? 因此您可以安全地使用它们null 。 或者将null变成false,如下所示:

 if(s?.isNotEmpty() ?: false){ // s is not empty } 

虽然我非常喜欢@miensol的答案,但我的答案是(这就是为什么我不把它放在注释中): if (s != null && s.isNotEmpty()) { … }实际上惯用的在Kotlin的方式。 只有这样,你会得到一个聪明的演员在String内的String ,而在接受答案的方式,你将不得不使用s!! 在块内。