java - SonarLint :更改此条件,使其不总是评估为“真”
问题描述
这是我的代码
@Override
protected void setValue(Object value) {
if (Boolean.TRUE.equals(value)) {
// do something for true
} else if (Boolean.FALSE.equals(value)) {
// do something for false
} else if (null == value) { // got SonarLint warning here
// do something for null
} else {
// for any other non-null and not Boolean object call the super method
super.setValue(value);
}
}
在标记为“// 此处收到 SonarLint 警告”的行处,我收到警告:Change this condition so that it does not always evaluate to "true
。我应该如何改变我的方法以避免这个警告?
解决方案
如果 value 是 Boolean 并且它既不是 TRUE 也不是 FALSE,那么它必须为 null,因为 Boolean 对象只能是 TRUE 或 FALSE。因此,如果它没有落入前两个 if 语句,则 value 始终为 null,因此发出 sonarlint 警告。在你的情况下,我会做这样的事情:
if (value instanceof Boolean) {
if (Boolean.TRUE.equals(value)) {
// do something for true
}
else {
// do something for false
}
}
else if (value != null) {
// for any other non-null and not Boolean object call the super method
super.setValue(value);
}
else {
// do something for null
}
推荐阅读
- visual-studio - Visual Studio 2017 ASP.NET Core 应用程序仅显示框架版本
- neo4j - 如何在 NEO4J 中有效地存储每个节点的时间序列值?
- wordpress - 如何纠正 WordPress 主题中的页面未找到错误
- python - 获取最新价格以查看是否获利。用彩色打印
- java - Spring 5 Java 配置设置默认配置文件
- machine-learning - 机器学习从一堆文件中提取文本
- spring-boot - 使用 Spring Boot 2.1.5、Spring Cloud Stream Greenwich.SR1 和 RocketMQ 0.9.0 无法停止 bean 'inputBindingLifecycle'
- c# - aud 如何声明 ROPC 访问令牌中设置的值
- vba - 根据表单上的两个日期值(如果存在)打开报表
- c++ - 将函数应用于犰狳矢量的部分