Slyh: return

Beitrag lesen

Hallo,

static String posOrNeg( double d )
{
   if ( d >= 0 )
     return "pos";
   if ( d < 0 )
     return "neg";
}

Das (eigentliche) Problem ist, daß nicht jeder Ausführpfad zu einem
return führt. Damit der Quellcode im Java-Sinne korrekt ist, muß bei
einer Methode, die einen Wert zurückliefert, jeder Ausführpfad in einem
return enden.

Jetzt wirst du sagen: "Klar führt jeder Ausführpfad zu einem return.
Es gibt ja nur die Möglichkeit, daß d >= 0 oder d < 0 ist."

Das siehst du als Mensch schon. Eclipse ist aber offenbar hier nicht
schlau genug, dies auch zu sehen. Es sieht nur 2 Bedingungen, die
scheinbar unabhängig voneinander sind. Die eine gibt einen Wert zurück.
Die andere gibt einen Wert zurück. Was aber, wenn beide Bedingungen
nicht erfüllt sind? Dann würde ja gar kein Wert zurückgegeben werden.
Also wird der genannte Fehler angezeigt.

Eclipse weiß nicht, daß mit den Abfragen schon alle Bedingungen
hinreichend erfüllt sind, und eine der beiden Bedingungen erfüllt sein
_muß_. Das ist zu viel für die statische Code-Analyse. Daran scheitert
sie bereits.

Ändere deinen Code z.B. so:

if ( d >= 0 )
     return "pos";
   else
     return "neg";

Dann sieht auch die statische Code-Analyse, daß entweder die eine oder
die andere Bedingung erfüllt ist, und daß beide jeweils einen Wert
zurückliefern. Und schon ist sie glücklich.
Außerdem ist der Code so auch noch besser lesbar und weniger fehler-
anfällig. :-)

Gruß
Slyh