Java代码中statusless == false触发Sonar‘移除布尔字面量false’报错如何修复
修复方案说明
报错原因
Sonar的该规则禁止布尔值直接和true/false字面量做相等比较,认为这类写法冗余,同时针对包装类Boolean的等值比较还隐含空指针风险。
可选修复方式
方案1:直接替换等值判断逻辑
用Boolean.FALSE.equals(statusless)替换statusless == false,利用常量调用equals规避空指针,同时符合Sonar规范,原有业务逻辑完全不变:
public List<LawOfficeDetailEntity> getLawOfficeByManagementUnitId(Long managementUnitId, Boolean statusless) { List<LawOfficeDetailEntity> entities = lawOfficeDetailRepository.findByManagementUnitType(String.valueOf(managementUnitId)); return (statusless == null || Boolean.FALSE.equals(statusless)) ? entities.stream().filter(office -> office.getValidityStatus() == 1).collect(Collectors.toList()) : entities; }
方案2:简化判断条件
原有判断statusless == null || statusless == false等价于「statusless不等于true」,可以直接简化为!Boolean.TRUE.equals(statusless),代码更简洁:
public List<LawOfficeDetailEntity> getLawOfficeByManagementUnitId(Long managementUnitId, Boolean statusless) { List<LawOfficeDetailEntity> entities = lawOfficeDetailRepository.findByManagementUnitType(String.valueOf(managementUnitId)); return !Boolean.TRUE.equals(statusless) ? entities.stream().filter(office -> office.getValidityStatus() == 1).collect(Collectors.toList()) : entities; }
注意事项
不要直接修改为!statusless,statusless是包装类Boolean,如果值为null时拆箱会触发空指针异常。
内容的提问来源于stack exchange,提问作者sadpatato
相关产品推荐
相关产品推荐

