在 Kotlin(Android 项目)中,最好使用哪个?
isNullOrEmpty
或者TextUtils.isEmpty
为什么
我相信他们会做正确的事情并且是“空”安全的,对吗?
基于我的问题here
如果您的项目将被移植到其他框架,使用isNullOrEmpty
可能会带来更安全的体验,因为它是基于 Kotlin(特别是package kotlin.text
)而不是package android.text;
为什么这样更安全?
好吧,它的实现isNullOrEmpty
可能会因平台而异,但它可以使用并且是 Kotlin 的一部分,而TextUtils.isEmpty
不是仅适用于 android。
我想说isNullOrEmpty
稍微好一点,因为它是一种语言的特性。TextUtils.isEmpty
是 Kotlin 外部的库函数。
对于 string.isEmpty(),空字符串值将抛出 NullPointerException 如果 isNullOrEmpty 它将检查第一个值是否为空,并将继续进行空检查。isNullOrEmpty 更可取
代码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
}
Witch 基本一样,inline 函数也有一个契约,如果值不为null,会告诉编译器返回false,不确定实际用法是什么,也许是优化。
是的,唯一不同的是NullPointerException
。
首先它会检查字符串是否为空。isNullOrEmpty
如果它不为空,那么它将检查它是否检查字符串是否为空。如果任何条件为真,则方法将返回真。
在 TextUtils.isEmpty
其中检查是否string
为空。如果string
为空,那么它将抛出NullPointerException
并且您的应用程序将崩溃。
TextUtils.isEmpty
与.基本相同isNullOrEmpty()
。然而,在可用性和编译方面存在差异:
1)TextUtils.isEmpty
可从android.text
包中获取,可通过 Android SDK 获取,并且isNullOrEmpty()
需要 Koltin 依赖(kotlin.text
包)。
2) 另一个区别是isNullOrEmpty()
扩展inline
函数,它的编译方式不同,也许性能略有提升。
除此之外,还有另一个有用的内联函数
isNullOrBlank()
。如果 String仅包含空格,它也会返回 true 。
在 Kotlin 中 isNullOrEmpty 是可取的。TextUtils.isEmpty 是 Java 特有的。如果字符串为空或 null,两者都返回布尔值。