Kotlin:isNullOrEmpty 与 TextUtils.isEmpty

Kotlin: isNullOrEmpty vs TextUtils.isEmpty

在 Kotlin(Android 项目)中,哪个更适合使用?

isNullOrEmptyTextUtils.isEmpty 为什么

我相信他们会做正确的事情并且 "null" 安全,对吧?

对于string.isEmpty(),空字符串值将抛出 NullPointerException 如果是 isNullOrEmpty,它将检查第一个值是否为 null,并将继续进行空检查。 isNullOrEmpty 更可取

基于我的问题

如果您的项目将移植到其他框架,使用 isNullOrEmpty 可能会带来更安全的体验,因为它是基于 Kotlin(特别是 package kotlin.text)而不是 package android.text;

为什么这样更安全?

好吧,isNullOrEmpty 的实现可能会因平台而异,但它将可供使用并且是 Kotlin 的一部分,而 TextUtils.isEmpty 仅适用于 android。

我会说 isNullOrEmpty 稍微好一些,因为它是一种语言的特性。 TextUtils.isEmpty 是 Kotlin 外部的库函数。

在 Kotlin 中,isNullOrEmpty 更可取。 TextUtils.isEmpty 特定于 Java。 如果字符串为空或 null,两者都是 returns 布尔值。

TextUtils.isEmpty的代码:

public static boolean isEmpty(@Nullable CharSequence str) {
        return str == null || str.length() == 0;
    }

isNullOrEmpty的代码:

public inline fun CharSequence?.isNullOrEmpty(): Boolean {
    contract {
        returns(false) implies (this@isNullOrEmpty != null)
    }

    return this == null || this.length == 0
}

基本一样,内联函数还有一个约定,如果值不为null,会告诉编译器return false,不知道实际用法是什么,也许吧这是一个优化。

是的,唯一的区别是 NullPointerException

isNullOrEmpty 中,首先它会检查字符串是否为空。如果它不为空,那么它会检查它是否检查字符串是否为空。如果任何条件为真,则方法将为 return 为真。

TextUtils.isEmpty 中,它检查 string 是否为空。如果 string 为空,那么它将抛出 NullPointerException 并且您的应用程序将崩溃。

TextUtils.isEmpty 基本上与 isNullOrEmpty() 相同。然而,在可用性和编译方面存在差异:

1) TextUtils.isEmpty 可从 android.text 包中获得,可与 Android SDK 一起使用,并且 isNullOrEmpty() 需要 Koltin 依赖项(kotlin.text 包)。

2) 另一个区别是 isNullOrEmpty() 是一个 inline 扩展函数,它的编译方式不同,可能会略微提高性能。

Apart from these, there is another useful inline function isNullOrBlank(). It also returns true if the String contains only white spaces.