java - 检查java中的条件导致错误
问题描述
我有下面的一段代码,在 if 条件下,我得到的声纳结果是字符串文字,在检查相等性时应该放在左侧。请告知如何克服这个问题。
final String aviid = avcMaster.getAVMaster().getAviiId();
if ((!aviid.equals("44")) || (!aviid.equals("55"))) { // ** Sonar Issue **//
final String defaultAiId = "88";
deviceElement.setAttribute("avi", defaultAiId);
}
else{
deviceElement.setAttribute("avi", aviid);
}
解决方案
String
变量与String
文字的比较
调用变量上的方法:如果变量为空,你会得到一个
NullPointerException
aviid.equals("44")
在文字上调用该方法:您无法获得 NPE,
false
如果变量持有,您将拥有null
"44".equals(aviid)
Sonar 会警告您,因为对于它来说,获得 false 比 更好NPE
,但代码是您的选择。
此外,您的测试是错误的,因为它总是正确的,因为您不能同时拥有 44 和 55,其中一个将是正确的,您肯定是说&&
,您最好以另一种方式进行不需要否定。
if ((!aviid.equals("44")) && (!aviid.equals("55"))) {
并且做得更短(来自评论)
deviceElement.setAttribute("avi", aviid.matches("44|55") ? aviid : "88");
推荐阅读
- python - selenium 无法在 iframe 中定位输入对象
- python - 您如何使用 selenium 驱动程序保持登录状态?
- java - 如何组合来自 Collectors.groupingBy 的结果
- c# - 反射 - 来自深层上下文的 SetValue
- r - 仅在读取 csv 文件列表时定义一列?
- python - AWS Glue - 替换包含“。”的字段名称 和 ”_”
- javascript - Persistent Bugger - 帮助摆脱一些 0
- python - Python将Counter对象转换为序数列表
- java - 春季发布 json
- c - 初始化和清理在内核模块中交换