在可为空的 Int 上使用 compareTo?

Using compareTo on a nullable Int?

我想知道检查可空列表是否大于 0 的最佳方法。

val list: List<Any>? = listOf()

if (list?.size.compareTo(1) > 0)
{
     //do something
}

这在检查是否大于 0 时导致错误。IDE 告诉我使用另一个 compareTo 进行安全调用,但这导致我遇到相同的情况。我能够通过为大小创建一个值来解决这个问题,但这似乎是一个奇怪的解决方法,我想知道我是否错过了更简单的方法。

val count = list?.size ?: 0
if (count > 1)
{
     //do something
}

我发现你的代码有两个问题。首先是您使用 compareTo() 而不是直接比较(例如 size > 0)。另一个是 list? 的使用意味着任何进一步的结果都可以是 null,但你没有处理它。

以下是我的处理方式:

val list: List<Any>? = listOf()

list?.let {
    if (it.isNotEmpty()) {

    }
}

Kotlin 1.3 似乎提供了一个 isNullOrEmpty() 方法,可以让你这样写:

val list: List<Any>? = listOf()

if (!list.isNullOrEmpty()) {

}

https://twitter.com/kotlin/status/1050426794682306562

为了兼容 Kotlin < 1.3,您可以使用

if (list?.isNotEmpty() == true) {
    // ....
}

true(不等于 null)的显式检查只有在列表非 null(且不为空)时才会采用分支。