为什么我已经使用了 !TextUtils.isEmpty() 却出现 'NullPointerException' 警告?

Why there is 'NullPointerException' warning when I already use !TextUtils.isEmpty()?

我正在使用以下代码:

Editable editable = popupSearchETHP.getText();

if (!TextUtils.isEmpty(editable)) {
      final String fieldVal = editable.toString();
}

final String fieldVal = editable.toString();

此语句产生警告:

方法调用'toString'可能产生'NullPointerException'

为什么????我已经在检查它是否为空。但它仍然会产生警告。如果您查看 TextUtils.isEmpty() 的源代码,您会发现:

 /**
 * Returns true if the string is null or 0-length.
 * @param str the string to be examined
 * @return true if str is null or zero length
 */
public static boolean isEmpty(@Nullable CharSequence str) {
    return str == null || str.length() == 0;
}

它已经检查了 null,它还检查了它的长度,然后 returns 结果。那么为什么会有警告Method invocation 'toString' may produce 'NullPointerException'?

尝试

if (!TextUtils.isEmpty(editable.toString())) {

而不是

if (!TextUtils.isEmpty(editable)) {

我不知道为什么在使用 !TextUtils.isEmpty() 时会出现警告,但我制作了我的自定义函数,它的工作方式类似并且不会产生任何警告:

private boolean isNotEmpty(CharSequence str) {
        return (str!=null && str.length() > 0);
    }

//Use this like below
if(isNotEmpty(editable))
{ }

您也可以改用

//noinspection ConstantConditions

如果您只需要删除特定行的警告。