2012-05-28 6 views
9

Mögliche Duplizieren:
what happens to an object in Java if you do not reference it, like here : myString.concat(“that”)Warum ist es nicht notwendig, den Rückgabewert einer Methode einer Variablen zuzuordnen?

public class ReturnTest 
{ 
    public static void main(String[] args) 
    { 
     ReturnTest rt = new ReturnTest(); 
     rt.show(); 
    } 

    public String show() 
    { 
     return "Hello"; 
    } 
} 

In dem obigen Code die show() Methode gibt einen String Wert, der nicht durch eine variable erfasst wird. Weder der Compiler noch die JVM erheben irgendeine Warnung, einen Fehler oder eine Ausnahme. Dasselbe gilt für primitive Rückgabetypen. Warum?

Sollte der Compiler nicht sicherstellen, dass kein von einer Methode zurückgegebener wichtiger Wert verloren geht?

Wie kann ich das aus einer Shell reparieren ??

+1

Was passiert, wenn Sie den Wert einer Variablen zuweisen, aber nicht untersuchen? Was, wenn Sie es untersuchen, aber nicht die "richtige" Entscheidung aufgrund dieser Untersuchung treffen? Wie weit willst du das machen, bevor der Compiler das "Richtige" macht? –

Antwort

10

Dies ist das Design der Sprache.

In vielen Fällen gibt die Methode einen Wert zurück, der Ihnen egal ist. Zum Beispiel StringBuilder.append() gibt das Objekt selbst zurück.

Es stimmt, dass in einigen Fällen ein wichtiger Rückgabewert verloren gehen könnte. Zum Beispiel gibt InputStream.skip(long n) die Anzahl der übersprungenen Bytes zurück. Und read gibt die Anzahl der gelesenen Bytes zurück. Es gibt einige Tools (Checkstyle, FindBugs), die solche Fehler erkennen. Aber die Sprache selbst fordert nicht, den Rückgabewert zu überprüfen. Und selbst wenn dies der Fall wäre, könnte das Programm den Wert ignorieren.

+0

Ich benutze keine IDE, wie kann ich das durch eine Shell beheben ?? – WickeD

+2

Sie können Checkstyle und FindBugs in der Befehlszeile oder als Teil des Builds ausführen. Aber warum benutzt du nicht einfach eine IDE? –

3

Weil Sie nicht unbedingt den zurückgegebenen Wert benötigen.

+0

meine Frage ist, wie macht Java, dass wir den zurückgegebenen Wert nicht brauchen? – WickeD

+0

ist es nicht. Es ist einfach nicht zugewiesen. – Bozho

+2

Es wird angenommen, dass der Programmierer weiß, was er tut. Wenn sie den zurückgegebenen Wert nicht speichern, haben sie ihn nicht benötigt. –

1

In Java Funktionen sind nicht rein, so dass sie nur für die Nebenwirkungen ausgeführt werden können. Es ist nur in diesem Fall gibt es keine Nebenwirkungen ... Betrachten

public String show() { 
    System.out.println("Hello"); 
    return "Hello"; 
} 

Jetzt möchten Sie eine Warnung? Der Compiler kann nicht wissen, ob Sie ihn für den Nebeneffekt oder den Wert ausgeführt haben, also warum bestehen?

3

Sie können eine Methode mit @CheckReturnValue annotieren, wenn der Rückgabewert immer verwendet werden soll. Statische Codeanalysen wie FindBugs berücksichtigen diese Annotation und melden Warnungen, wenn Sie sie verletzen.

Zumindest ist dies sehr sinnvoll, wenn die Methode eine Art Objekt zurückgibt, das am Ende, für das der Aufrufer verantwortlich ist, eine abschließende Verarbeitung benötigt. Dies gilt für Ressourcen, die am Ende geschlossen werden müssen. Sperren, die am Ende freigegeben werden müssen ...

Verwandte Themen