Kotlin:isNullOrEmpty 与 TextUtils.isEmpty
Kotlin: isNullOrEmpty vs TextUtils.isEmpty
在 Kotlin(Android 项目)中,哪个更适合使用?
isNullOrEmpty
或 TextUtils.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.
在 Kotlin(Android 项目)中,哪个更适合使用?
isNullOrEmpty
或 TextUtils.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.