我是Kotlin的新手,我正在寻找帮助,以使下面的代码更优雅.

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

如果我使用以下代码:

if (s?.isNotEmpty()) {

编译器会抱怨

Required: Boolean
Found: Boolean?

Thanks.

推荐答案

You can use isNullOrEmpty or its friend isNullOrBlank like so:

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

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

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

您还可以执行以下操作

if(s?.isNotEmpty() == true){ 
    // s is not empty
}

Kotlin相关问答推荐

为什么Kotlin函数参数名会 destruct 方法调用?

Kotlin中一个接口的实现问题

在Kotlin中,我是否可以访问已知的WHEN子句值?

CompositionLocal 究竟如何以及何时隐式设置值?

为何Kotlin标准库中的AND和OR函数不能像&&和||一样进行短路运算?

协程子作业(job)取消

mutableStateOf 在 Jetpack Compose 中不记住 API 的情况下保持重组后的值

在 Kotlin 中 import 如何找到文件路径?

从带有 Room 和 Flows 的 SQLite 表中获取祖先树

如何在kotlin中使用协程每秒调用一个函数

找不到引用的类 kotlin.internal.annotations.AvoidUninitializedObjectCopyingCheck

Kotlin 静态函数:伴生对象,@JvmStatic @JvmField

Kotlin 有 array.indexOf 但我无法弄清楚如何做 array.indexOfBy { lambda }

Kotlin Native如何将字节数组转换为字符串?

是否在Kotlin中重写enum toString()?

Kotlin 接口属性:只需要公共 getter 而没有公共 setter

Kotlin out-projected 类型禁止使用

通过在 kotlin-gradle 中使用子项目Unresolved reference: implementation

Java的Kotlin:字段是否可以为空?

Kotlin 是否支持部分应用程序?