我想知道为什么会这样:
请注意,两个if语句的顺序不会改变行为。
如果您查看两个检查器功能的源代码,我看不出两者的任何显着差异。那么为什么我只在第二种情况下收到警告呢?
public static boolean isEmpty(@Nullable CharSequence str) {
if (str == null || str.length() == 0)
return true;
else
return false;
}
public static boolean isValidUrl(String url) {
if (url == null || url.length() == 0) {
return false;
}
return (isAssetUrl(url) ||
isResourceUrl(url) ||
isFileUrl(url) ||
isAboutUrl(url) ||
isHttpUrl(url) ||
isHttpsUrl(url) ||
isJavaScriptUrl(url) ||
isContentUrl(url));
}
更新:解决方案:
由于TextUtils.isEmpty()在参数上有@Nullable标记,因此适用:
标记为@Nullable或的变量,方法参数和返回值 @NotNull被视为可为空(或分别为非null)并使用 在分析期间检查可空性合同,例如报告 可能的NullPointerException错误。
答案 0 :(得分:1)
您应该注意到TextUtils.isEmpty参数是使用@Nullable注释注释的。 UrlUtil.isValidUrl没有此注释。