下面一行如何生成始终评估为 false 的声纳 qube 问题?
How can the below line generate sonar qube issue of always evaluating to false?
我有以下代码行,sonarqube 说,
"Change this condition so that it doesn't always evaluate to false"
。
下面是一行。
if (params.isEmpty() && params == null) {
throw new ServiceSDKException("Parameters cannot be empty or null!");
}
下面是完整的方法,以备不时之需。
public void init(String params) throws ServiceSDKException {
if (params.isEmpty() && params == null) {
throw new ServiceSDKException("Parameters cannot be empty or null!");
}
String[] configParams = params.split(",");
options.setMqttURL(configParams[0]);
options.setMqttClientID(configParams[1]);
try {
options.setWillMessage("v1/items/mqtt/0/event/will"
, "Last will"
, 2, true);
new File("./db").mkdir();
edgeNode = EdgeNodeFactory.createMQTTChannel("./db", options,
subscriptionTask, 500, 500);
isClientConnected = true;
} catch (EdgeNodeException e) {
isClientConnected = false;
throw new ServiceSDKException("EdgeNodeException occurred", e);
}
}
if (params.isEmpty() && params == null)
如果您在没有抛出 NullPointerException
的情况下成功执行了 params.isEmpty
,那么 params
必然是非空的。
我想你的意思可能是:
if (params == null || params.isEmpty())
这个条件:
if (params.isEmpty() && params == null) {
将您带到死代码,因为它们永远不可能同时为真。
这就是 sonarqube 抱怨的原因。
为什么:
String#isEmpty() 是一种 returns 布尔值的方法,如果字符串不是 null 引用
快速修复:
更改逻辑测试:
if (params.isEmpty() || params == null) {
我有以下代码行,sonarqube 说,
"Change this condition so that it doesn't always evaluate to false"
。
下面是一行。
if (params.isEmpty() && params == null) {
throw new ServiceSDKException("Parameters cannot be empty or null!");
}
下面是完整的方法,以备不时之需。
public void init(String params) throws ServiceSDKException {
if (params.isEmpty() && params == null) {
throw new ServiceSDKException("Parameters cannot be empty or null!");
}
String[] configParams = params.split(",");
options.setMqttURL(configParams[0]);
options.setMqttClientID(configParams[1]);
try {
options.setWillMessage("v1/items/mqtt/0/event/will"
, "Last will"
, 2, true);
new File("./db").mkdir();
edgeNode = EdgeNodeFactory.createMQTTChannel("./db", options,
subscriptionTask, 500, 500);
isClientConnected = true;
} catch (EdgeNodeException e) {
isClientConnected = false;
throw new ServiceSDKException("EdgeNodeException occurred", e);
}
}
if (params.isEmpty() && params == null)
如果您在没有抛出 NullPointerException
的情况下成功执行了 params.isEmpty
,那么 params
必然是非空的。
我想你的意思可能是:
if (params == null || params.isEmpty())
这个条件:
if (params.isEmpty() && params == null) {
将您带到死代码,因为它们永远不可能同时为真。
这就是 sonarqube 抱怨的原因。
为什么:
String#isEmpty() 是一种 returns 布尔值的方法,如果字符串不是 null 引用
快速修复:
更改逻辑测试:
if (params.isEmpty() || params == null) {