可以减少对非空类型的调用 - 更改对 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语句对非空数组输出时,会清空正则捕获组。