为什么我已经使用了 !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
如果您只需要删除特定行的警告。
我正在使用以下代码:
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
如果您只需要删除特定行的警告。