【发布时间】:2026-01-10 07:35:01
【问题描述】:
我正在使用 Android Studio/IntelliJ IDEA 进行开发。
我已启用名为“恒定条件和异常”的检查检查,如果我面临 NPE 风险,则会显示警告,例如:
String foo = foo.bar(); // Foo#bar() is @nullable
if (foo.contains("bar")) { // I'm living dangerously
...
}
我的代码中有以下内容:
String encoding = contentEncoding == null ? null : contentEncoding.getValue();
if (!TextUtils.isEmpty(encoding) && encoding.equalsIgnoreCase("gzip")) {
inputStream = new GZIPInputStream(entity.getContent());
} else {
inputStream = entity.getContent();
}
这里是TextUtils#isEmpty(String)的源代码:
/**
* 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(CharSequence str) {
if (str == null || str.length() == 0)
return true;
else
return false;
}
我不会冒任何 NPE 的风险,因为 TextUtils#isEmpty(String) 将返回 true 到 null 指针。
但是我仍然收到Method invocation 'encoding.equalsIgnoreCase("gzip")' may produce 'java.lang.NullPointerException' 的小警告,这可能很烦人。
如果已经进行了空值检查,是否可以使该检查更智能并忽略 NPE 警告?
【问题讨论】:
-
您可以通过输入
"gzip".equalsIgnoreCase(encoding)来规避此问题。 -
你说的没错,但并不总是
String#equals。例如foo.contains(bar),两者都是指针:它可以警告 foo 可以为空,而空检查已经由TextUtils#isEmpty完成
标签: intellij-idea android-studio