在可为空的 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()) {
}
为了兼容 Kotlin < 1.3,您可以使用
if (list?.isNotEmpty() == true) {
// ....
}
true
(不等于 null
)的显式检查只有在列表非 null
(且不为空)时才会采用分支。
我想知道检查可空列表是否大于 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()) {
}
为了兼容 Kotlin < 1.3,您可以使用
if (list?.isNotEmpty() == true) {
// ....
}
true
(不等于 null
)的显式检查只有在列表非 null
(且不为空)时才会采用分支。