2016-12-19 2 views
3

ich Sonar Verletzung bin immer:Sonar Fehlerbedingungen sollte nicht unbedingt auf „TRUE“ oder „FALSE“ bewerten

„Bedingungen sollten nicht unbedingt bewerten auf‚TRUE‘oder‚FALSE‘“

für den folgenden Code.

List<MediaContent> savedList = source.getChildMediaContents(); 
List<MediaContent> supplierList = target.getChildMediaContents(); 

// if existing and incoming both empty 
if(savedList == null && supplierList == null){ 
    return false; 
} 

// if one is null and other is not then update is required 
if(savedList == null && supplierList != null){ 
    return true; 
} 

if(savedList != null && supplierList == null){ 
    return true; 
} 

Unterhalb der beiden Blöcke, wenn es

// if one is null and other is not then update is required 
if(savedList == null && supplierList != null){ 
    return true; 
} 

if(savedList != null && supplierList == null){ 
    return true; 
} 

Antwort

4
if(savedList == null && supplierList == null){ 
    return false; 
} 

if(savedList == null && supplierList != null){ 

Die Bedingung supplierList != null einen Fehler gibt, ist immer wahr, wenn erreicht. Aufgrund des Kurzschlussverhaltens des Operators && in Java wird vor supplierList != null erreicht, savedList == null muss zuerst wahr sein.

Aber wenn savedList == null wahr ist, dann wissen wir aus dem vorherigen Zustand, dass supplierList nicht null ist, so ist es ein sinnloser Zustand.

Auf der anderen Seite, wenn savedList == null falsch ist, dann die aufgrund des Verhaltens von Kurzschlüssen, die supplierList != null werden nicht ausgewertet.

So unabhängig vom Ergebnis der savedList == null, supplierList != null nie ausgewertet werden so können Sie einfach diesen Zustand entfernen.

if (savedList == null) { 
    return true; 
} 

Next:

if(savedList != null && supplierList == null){ 

Dank der Vereinfachung früher, jetzt ist es klar, dass savedList nicht null sein kann. So können wir diese Bedingung entfernen zu:

if (supplierList == null) { 
    return true; 
} 

Kurz gesagt, dies entspricht geposteten Code:

if (savedList == null && supplierList == null) { 
    return false; 
} 

if (savedList == null || supplierList == null) { 
    return true; 
} 
+0

Sie könnten sogar die letzten zwei if-Klauseln mit 'if (savedList == null || supplierList == null) return true' –

+0

Danke @ChristianLutz, gute Idee, aktualisiert – janos

0

Basierend auf die oben Sie die zweiten zwei, wenn die Bedingungen zu vermeiden und einen anderen Fall haben

if(savedList == null && supplierList == null){ 
    return false; 
} else { 
    return true; // either savedList or supplierList is not null 
} 

oder Sie können einfach return-Anweisung haben und entfernen Sie alle if-Anweisungen

return (savedList != null || supplierList != null); 
Verwandte Themen