Falsches Warning in IntelliJ?

Thallius

Thallius

Top Contributor
Hi,

dieser Code

Code:
if(!avoidAllFEUsed || !(allFeUsed = checkAllFEUsed(group, allFEList, preferredFE)))
{
      if(checkToolsForJob(group))
      {
                if( allFeUsed)
                {

produziert ein IDE Warning

Condition 'allFeUsed' is always 'false'

Übersehe ich da was oder hat er unrecht?

Gruß

Claus
 
Blender3D

Blender3D

Top Contributor
if(!avoidAllFEUsed || !(allFeUsed = checkAllFEUsed(group, allFEList, preferredFE))) { if(checkToolsForJob(group)) { if( allFeUsed) {
Wenn die Eingangsbedingung
Java:
!(allFeUsed = checkAllFEUsed(group, allFEList, preferredFE)))
erfüllt ist, kann die zweite Bedingung
Java:
if( allFeUsed)
nie erfüllt sein. --> Die Warnung ist korrekt.
 
F

fhoffmann

Top Contributor
Die Zuweisung an allFeUsed im oder wird nur ausgeführt, wenn die erste Bedingung (vor dem oder) falsch ist.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Ist das nicht egal? Es wird ja in der If intialisiert wenn avoidAllFEUsed true ist
Ne, initialisiert wird's vorher, und im if wird's eben nur nur zugewiesen, wenn avoidAllFEUsed wahr ist, dann ist ist die gesamte Bedingung aber nur wahr, wenn allFeUsed falsch ist.

Wenn avoidAllFEUsed wahr ist, muss allFeUsed falsch sein, damit die Bedingung zutrifft - das innere if spielt also keine Rolle.
Wenn avoidAllFEUsed falsch ist, wird allFeUsed nicht neu zugewiesen und der Initialwert im inneren if genutzt.

(Und btw, solche Zuweisungen sind scheiße :p )
 
Thallius

Thallius

Top Contributor
Ne, initialisiert wird's vorher, und im if wird's eben nur nur zugewiesen, wenn avoidAllFEUsed wahr ist, dann ist ist die gesamte Bedingung aber nur wahr, wenn allFeUsed falsch ist.

Wenn avoidAllFEUsed wahr ist, muss allFeUsed falsch sein, damit die Bedingung zutrifft - das innere if spielt also keine Rolle.
Wenn avoidAllFEUsed falsch ist, wird allFeUsed nicht neu zugewiesen und der Initialwert im inneren if genutzt.

(Und btw, solche Zuweisungen sind scheiße :p )

Ok aber ich wüßte jetzt nicht wie ich es "schöner" machen sollte. Das Abfragen vobn allFEUsed innen ist nur um ein Warning in den Log zu schreiben. Dieses Warning darf aber nur kommen wenn checkTools nicht fehlschlägt.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Nur mir dem Code-Stück schlecht zu sagen, was man anders machen könnte.

Für den Anfang u.U. allFEUsed sinnvoll initialisieren, das aktuelle scheint ja nicht gewünscht zu sein (zumindest wird ja aktuell nie geloggt). Vielleicht kann man auch die Zuweisung erstmal daraus ziehen (je nachdem, ob die Methode aufgerufen werden darf oder ob das zu Problemen führt). Falls die innere Bedingung einen Fehlerzustand loggen soll, kann man das möglicherweise auch vorher schon abfangen. Schwierig, da irgendwas konkretes zu empfehlen...
 
Thallius

Thallius

Top Contributor
Nur mir dem Code-Stück schlecht zu sagen, was man anders machen könnte.

Für den Anfang u.U. allFEUsed sinnvoll initialisieren, das aktuelle scheint ja nicht gewünscht zu sein (zumindest wird ja aktuell nie geloggt). Vielleicht kann man auch die Zuweisung erstmal daraus ziehen (je nachdem, ob die Methode aufgerufen werden darf oder ob das zu Problemen führt). Falls die innere Bedingung einen Fehlerzustand loggen soll, kann man das möglicherweise auch vorher schon abfangen. Schwierig, da irgendwas konkretes zu empfehlen...

Initialisierung von allFEUsed erfolgt genau eine Zeile über dem Code den ich gepostet habe. boolean allFEUsed = false;
checkAllFEUsed sollte nur aufgerufen werden wenn die erste Bedingung fehlschlägt, da das ein Codestück aus dem inneren einer sehr komplexen Berechnung ist (Deshalb auch nur das kleine Codestück) und dort jede unnötige Berechnung gespart werden muss.
 
Thallius

Thallius

Top Contributor
Na dann ist doch klar, dass innerhalb des if's allFEUsed niemals wahr ist :) Würd das innere if einfach wegnehmen, kann ja nie zutreffen, und dann ist auch die Variable überflüssig...

Hmm ok, jetzt ist der Knoten geplatz. Die Loggerausgabe muss kommen wenn avoidAllFEUsed = false ist und allFEUsed = true, aber den Zustand bekomme ich ja gar nicht.
 
Thallius

Thallius

Top Contributor
So habe jetzt das Loggin in die checkAllFEUsed gepackt. Muste dafür zwar paar zusätzliche Parameter an die Methode geben die dummerweise echt nur fürs Loggin gebraucht werden aber ich glaube ich trotzdem der sauberer Weg.

Danke für die Hilfe

Claus
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Kommt drauf an, Dinge weiterreichen nur für's Logging ist nicht unbedingt der saubere Weg - die Methode loggt ja dann Dinge, die sie eigentlich nicht kennt.

u.U. kann man das sinnvoll umstrukturieren, etwa das erste if aufzulösen und den zweiten Teil vorher separat machen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Eclipse Konsole gibt falsches Java Projekt aus IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 6
Y Eclipse Neues Projekt - falsches JRE IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 5
L NetBeans WARNING: JavaFX API 8.0.111 - JavaFX runtime 8.0.102 IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 0
J Eclipse Warning und Debug Icon überlappen verhindern? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 5
S Eclipse JAR export warning - duplicate entry IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
N Warning: Type safety: The method put(Object, Object) belongs IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
P Intellij "httpRequest" ins Projekt mit einbinden? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 49
T IntelliJ, Gradle und Git: gitignore IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 7
N Frage zu meinen IntelliJ-Einstellungen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
mrBrown IntelliJ 2020.1 - Maven Projekte nicht ausführbar IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 8
W IntelliJ soll nicht immer alle Code-Files checken IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
D JavaFX 12 / SDK 12 -> IntelliJ error IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 7
R IDEA IntelliJ Intellij klaut mir zu viel zu viel Speicherplatz weg! IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 22
M Intellij IDEA lädt Font nicht und Darcula funktioniert nicht IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 5
M Intellij IDEA Programm ohne Main-Methode starten IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 6
Y Intellij mit Android SDK IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
B IntelliJ - .properties in jar einbinden IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 7
E Maven-Installation für Intellij IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
U IDEA IntelliJ IntelliJ IDEA automatische Formatierung deaktivieren IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 1
K IntelliJ unter Linux: Probleme beim Ausführen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 0
M Idea IntelliJ - Starten der Mainmethode ? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 10
A IDEA IntelliJ IntelliJ Maven oder Webprojekt, kann keine normalen Java Klassen erstellen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
K IDEA IntelliJ Umstieg von ADT (Eclipse) auf Android-Studio (IntelliJ IDEA) IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 1
R intellij idea mit SVN tortoise 1.8 verwenden IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
X "Extract Method Object" aus IntelliJ auch in Eclipse? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 6
U [IntelliJ] Variablen Refactoring IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
H Intellij 8.1.3 JDSK Probleme IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
S Metriktools für IntelliJ IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
M Grails Plugin in IntelliJ IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 6
A IntelliJ zeigt meine class-Files nicht an!? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
L Intellij IDEA 8 - Wie ist eure Meinung? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 38
J IDEA IntelliJ IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 10
G IDEA IntelliJ Problem IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben