SONAR beklagen, ändern Sie die Bedingung so, dass es nicht immer auswerten "auf " false"
public String generateURLSafeToken(String username, char[] password) throws CredentialTokenException {
this.tokenValid = false;
String token = null;
if ((username.length() < 1) || (username == null)) {
throw new CredentialTokenException("Username cannot be an empty string or null.");
}
if ((password.length < 1) || (password == null)) {
throw new CredentialTokenException("Password cannot be an empty or null.");
}
Ich mich vor diesem Fehler in Zeile 4 und Zeile 7 (username == null und password == null)
Und ich brauche dieses Teil in meinem code. Ich versuche isEmpty() anstelle von null, aber mit Problemen konfrontiert, in das auch . Was ist eine Alternative oder die Lösung um dies zu beheben SONAR Fehler
- Tauschen Sie die Bedingungen rund um. Sie sollten überprüfen, für
null
vor der Prüfung der Länge.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Bedingungen, die immer wahr
false
sindusername == null
undpassword == null
.Nehmen wir das Beispiel von
username
. Der Betreiber||
ist Kurzschluss Bedeutung, die er nicht auswerten der rechten Seite, wenn die linke Seite isttrue
. Grundsätzlich gibt es 2 Fälle:username
nichtnull
. Der Zustandusername.length() < 1
bewertettrue
kehren wir direkt und geben Sie dieif
Zweigfalse
versuchen wir zu bewertenusername == null
. Aber da dieusername
nichtnull
diese immer bewerten zufalse
.username
gegeben istnull
. Der Zustandusername.length() < 1
ausgewertet wird. Dies tatsächlich hält direkt gibt es: es wirft einNullPointerException
- und nicht auswerten der rechten Seite.Daher können Sie sehen, Wann immer der
username == null
Zustand war eigentlich ausgewertet, das Ergebnis war immerfalse
. Dies ist, was die SonarQube Warnung sagt Sie.Hier die Lösung ist, drehen Sie die 2 Bedingungen. Sollten Sie mit
statt. Wenn Sie beginnen, und gehen Sie durch jeden Fall, werden Sie feststellen, dass keiner der Ausdrücke wird immer das gleiche Ergebnis:
username
nichtnull
. Erste Bedingung eindeutig ausgewertetfalse
und der zweite wird ausgewertet, welche möglicherweise zurücktrue
oderfalse
.username
gegeben istnull
. Die erste Bedingung eindeutig ausgewertet, umtrue
und Kurzschlüsse.