可以减少对非空类型的调用 - 更改对 isEmpty 的调用

Posted

技术标签:

【中文标题】可以减少对非空类型的调用 - 更改对 isEmpty 的调用【英文标题】:Call on not-null type may be reduced-Change call to isEmpty 【发布时间】:2019-10-29 10:37:00 【问题描述】:

我正在使用以下代码-

editText.text.toString().isNullOrEmpty()

我得到低于 lint 警告-

对非空类型的调用可能会减少

当我右键单击 lint 警告时,它会说-

更改对 isEmpty 的调用

当我检查代码时-

@Nullable public Editable getText() 
        if (Build.VERSION.SDK_INT >= 28) 
            return super.getText();
        
        // A bug pre-P makes getText() crash if called before the first setText due to a cast, so
        // retrieve the editable text.
        return super.getEditableText();
    

这意味着editText.text 可以为空

/**
 * Returns a string representation of the object. Can be called with a null receiver, in which case
 * it returns the string "null".
 */
public fun Any?.toString(): String

这意味着toString() 可以返回 null

那么ediText.text.toString().isEmpty() 是如何抛出空指针异常的更好选择呢?

【问题讨论】:

toString() 返回String,而不是String?。结果不可为空 - 根据文档 - 它为空对象返回 "null" "null".isEmpty() 将返回 false。这意味着如果 editText 为 null , isNullOrEmpty() 返回 true 但 isEmpty() 返回 false.. 那么 lint 如何建议我将 isNullOrEmpty() 替换为isEmpty()? 【参考方案1】:

当您调用 toString() 时,生成的字符串永远不会为空(因此,isNullOrEmpty() == isEmpty) - 任何空值都会更改为字符串 "null"

由于这不是您想要检查的内容,您应该停止使用toString() - 直接使用isNullOrEmpty()

editText.text.isNullOrEmpty()

【讨论】:

以上是关于可以减少对非空类型的调用 - 更改对 isEmpty 的调用的主要内容,如果未能解决你的问题,请参考以下文章

node环境下console语句对非空数组输出时,会清空正则捕获组。

node环境下console语句对非空数组输出时,会清空正则捕获组。

在类内部处理回调时必须调用对非静态成员函数的引用

Kotlin中的? 、?. 、?: 、!!、as?

无法从 HibernateUtil 类型对非静态方法 getSessionFactory() 进行静态引用

为啥对非指针结构进行类型转换会给出语法错误