4

在 Kotlin(Android 项目)中,最好使用哪个?

isNullOrEmpty或者TextUtils.isEmpty为什么

我相信他们会做正确的事情并且是“空”安全的,对吗?

4

7 回答 7

7

基于我的问题here

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

为什么这样更安全?

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

于 2019-12-13T11:20:01.843 回答
3

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

于 2019-12-13T11:21:17.250 回答
1

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

于 2019-12-13T11:18:18.797 回答
1

代码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,不确定实际用法是什么,也许是优化。

于 2019-12-13T11:23:15.607 回答
1

是的,唯一不同的是NullPointerException

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

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

于 2019-12-13T11:27:48.223 回答
1

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

1)TextUtils.isEmpty可从android.text包中获取,可通过 Android SDK 获取,并且isNullOrEmpty()需要 Koltin 依赖(kotlin.text包)。

2) 另一个区别是isNullOrEmpty()扩展inline函数,它的编译方式不同,也许性能略有提升。

除此之外,还有另一个有用的内联函数 isNullOrBlank()。如果 String仅包含空格,它也会返回 true 。

于 2019-12-13T11:35:53.393 回答
0

在 Kotlin 中 isNullOrEmpty 是可取的。TextUtils.isEmpty 是 Java 特有的。如果字符串为空或 null,两者都返回布尔值。

于 2019-12-13T11:23:01.947 回答