我在Android Studio中具有以下代码,但收到String source_regions_user_id = "";
if (user_ids != null && "".equals(source_region) && user_ids.containsKey(source_region) && user_ids.get(source_region) != null && user_ids.get(source_region) != "") {
source_regions_user_id = user_ids.get(source_region).toString();
} else {
return true; // Unable to find a matching user_id for source_region
}
的警告。
user_ids
请注意,Hashmap
是source_region
,而String
是toString()
。
我相信我正在检查print(A[i,0:i-1])
所依赖的所有内容中的空值,那么Android Studio为什么仍会发出此警告?
答案 0 :(得分:1)
编译器应该能够看到您检查是否为空,但是在if
语句中有很多条件,所以也许它超出了编译器性能的某个阈值。
由于else
只不过是return
,因此您应该翻转该语句。这样就无需分别声明变量。
我还将条件分开评论。
if (user_ids == null)
return true;
if (! "".equals(source_region)) // I think you meant the opposite check
return true;
if (! user_ids.containsKey(source_region)) // Redundant, the next check will cover this
return true;
if (user_ids.get(source_region) == null)
return true;
if (user_ids.get(source_region) == "") // Object is not a string, so this will always fail
return true;
String source_regions_user_id = user_ids.get(source_region).toString();
您还应该使用isEmpty()
或length()
检查空字符串,而不是与""
进行比较。
因此,考虑到这些注释,我们可以将代码更改为:
if (user_ids == null || source_region.isEmpty())
return true;
Object obj = user_ids.get(source_region);
if (obj == null)
return true;
String source_regions_user_id = obj.toString();
if (source_regions_user_id.isEmpty())
return true;
// use value here
使用此代码,编译器不会感到困惑,因此不会发出警告,您只需在地图中查找一次即可。