2016-03-30 13 views
1

Ich habe die folgenden Zeilen Code und Sonarqube sagt,Wie kann die untere Zeile ein Sonar Qube-Problem erzeugen, das immer auf false auswertet?

„diesen Zustand ändern, so dass es nicht immer falsch bewerten ist“

.

Unten ist die Zeile.

if (params.isEmpty() && params == null) { 
     throw new ServiceSDKException("Parameters cannot be empty or null!"); 
    } 

Unten ist die ganze Methode, falls Sie brauchen.

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); 
     } 

    } 
+0

Wenn Parameter Null ist, erhalten Sie eine NullPointerException. Sie sollten zuerst nach null suchen und dann ist isEmpty() mit einer oder Operation (||) – JDDelgado

+0

Nichts ist sowohl '" "und" null ". Daher kann die Bedingung niemals als wahr gewertet werden. –

Antwort

4
if (params.isEmpty() && params == null) 

Wenn Sie erfolgreich params.isEmpty ausgeführt haben, ohne eine NullPointerException zu werfen, dann params ist notwendigerweise nicht null ist.

Ich denke, vielleicht Sie gemeint:

if (params == null || params.isEmpty()) 
0

Diese Bedingung:

if (params.isEmpty() && params == null) { 

wird Sie zu einem toten Code zu bringen, da sie nie beide wahr sein kann.

das ist der Grund, warum die Sonarqube beschweren.

Warum:

String # isEmpty() ist eine Methode, die einen boolean, wenn der String zurückgibt nicht

Quickfix verwiesen null:

Ändern Sie den logischen Test für:

if (params.isEmpty() || params == null) {