Intellij Idee Hinweis: Bedingung ist immer falsch - kann das hier wahr sein? (Java)

9

Ich habe den folgenden Code:

%Vor%

Nun gibt mir IntelliJ Idee für den zweiten und dritten Aufruf von getBoolean() den folgenden Hinweis:

%Vor%

Nach meinem Verständnis ist das nicht wahr, da getBoolean() entweder true oder false sein kann, abhängig vom generierten Zufallswert. Fehle ich hier etwas oder ist das ein Fehler in IntelliJ Idea?

    
Mathias Bader 05.08.2015, 10:31
quelle

3 Antworten

7

Es ist kein Fehler. Es ist ein Feature:)

Wenn Sie in Ihrer IDE genau hinsehen, wird Ihnen sagen, dass der 2. und 3. Aufruf von getBoolean () immer falsch ist, aber nicht der erste.

Idea nimmt (in diesem Fall falsch) an, dass Ihre Methode, die parameterlos ist und "get" ... aufgerufen wird, immer den gleichen Wert zurückgibt.

Wenn das der Fall wäre und der erste Aufruf wahr wäre, würde auf den anderen nie zugegriffen werden (wegen der Rückgabe).

Wenn der erste Aufruf falsch war, waren es auch die anderen.

IDEA versucht, klug zu sein w.r.t. gute Programmierpraktiken, aber es ist nicht unfehlbar.

Wenn Sie Ihre Methode ändern, um Parameter zu haben (oder benennen Sie sie um, damit sie nicht wie ein Getter aussieht)

%Vor%

Die Warnungen werden verschwinden (auch wenn Sie immer mit dem gleichen Argument aufrufen).

(Beachten Sie, dass selbst wenn es ein Getter war, es für ein nicht endgültiges Feld immer noch falsch ist, da es sich in einer Multithread-Umgebung ändern kann!)

    
Diego Martinoia 05.08.2015, 10:42
quelle
1

IDEA denkt, dass der Aufruf getBoolean( ) nicht geändert wird, wenn es zum zweiten (oder dritten Mal) aufgerufen wird. Normalerweise, wenn Sie den gleichen Wert zurückgeben, könnte der zweite Anruf nie erreicht werden. Deshalb hebt IDEA es hervor.

    
StanislavL 05.08.2015 10:40
quelle
0

In meinem Fall, wenn ich MY_ACTUAL_CLASS_NAME.getBoolean () benutze, reklamiert es nicht (da die Methode statisch ist). Vielleicht liegt es daran, dass IntelliJ Idea keine statische Berechnung berücksichtigt (ein möglicher Fehler hier).

    
Rajesh Goel 07.07.2017 18:21
quelle