2010-06-16 6 views

Antwort

13

Da es nicht erforderlich ist, das Ergebnis zuweisen, wenn Sie eine Methode ausführen möchten. Wie würde der Compiler dann wissen, welche der überladenen Sie anrufen möchten? Es wird Unklarheiten geben.

+0

Was zurückgegebenen Werte passiert, wenn sie nicht zugeordnet sind? Werden sie einfach gecodiert? – Pierreten

+3

@Pierreten: Wenn nicht anderswo referenziert (zum Beispiel in der Methode), dann ja. – BalusC

0

Da eine aufrufende Methode den Rückgabetyp an die aufgerufene Methode übergeben müsste.

So haben Sie

Public Integer doStuff(String thing) { }; 

und

Public Double doStuff(String thing) { }; 

Die Klasse doStuff Aufruf müssten die Klasse sagen, die doStuff zu verwenden, die einen String (bereits der Fall ist), und gibt einen Double (macht nicht).

Der Grund, warum Java dies tut? Um zu verhindern, dass schrecklicher Code wie ich oben erwähnt, nehme ich an :) Überladen ist einfach zu einem Durcheinander machen, und ich bin mir nicht sicher, ob ich den Vorteil für den Fall oben sehe.

2

Weil Sie nicht nur durch den Methodenaufruf feststellen können, was der Rückgabetyp sein soll. Der Compiler muss in der Lage sein, unter Verwendung nur von Informationen an der Call-Site zu bestimmen, welche Methode aufgerufen werden soll. Rückgabewerte können verworfen werden, sodass Sie im Allgemeinen nicht wissen können, dass es einen Rückgabewert gibt und was sein Typ ist. es wird noch verwirrender, wenn man anfängt, über Typkozessionen (kurz-> int) oder Umwandlungen nachzudenken.

Wenn der Compiler einen Methodenaufruf sieht, weiß er, dass alle Argumente vorhanden sein müssen, um ein gültiger Methodenaufruf zu sein, damit er diese Argumente verwenden kann, um die richtige Aufrufmethode zu finden. Aber Rückgabewerte sind zum Zeitpunkt des Aufrufs nicht bekannt, und selbst der Typ des Rückgabewerts ist möglicherweise nicht erkennbar.

0

Jede angegebene Aufruf-Site konnte aufgrund von Polymorphie und mindestens Auto- (Un) -Boxing erfolgreich eine Reihe verschiedener Rückgabetypen verwenden. Dies würde entweder Regeln erfordern, um mehrdeutige Fälle zu behandeln, oder nur in einfachen Fällen arbeiten Umstände.

0

Ich wollte nur darauf hinweisen, dass - obwohl in Java nicht möglich - Ada Überladung unterstützt, die rein auf Rückgabetypen basiert. Doch Googles beste explaination auf, wie das funktioniert, ist ein Stapelüberlauf Beitrag:

Function overloading by return type?

Verwandte Themen