Java Methoden durch Rückgabetyp überladen

Krik

Fleet Admiral
Registriert
Juni 2005
Beiträge
12.322
Moin,

Methoden können in Java überladen werden, wenn sich die Methodensignatur bis auf den Namen der Methode unterscheidet.

Aber warum geht das dann nicht? Sind keine überladen Methoden möglich, die sich nur nach Rückgabetyp unterscheiden?

Code:
public final double getValue() {
	return valueNumerical;
}

public final String getValue() {
	return valueString;
}

Ich hätte das aber gerne! =)

Gruß, Laurin
 
Genau, das geht leider nicht. Entweder du machst den Datentyp zusätzlich zum Suffix oder du musst die Methoden komplett anders nennen. Ich mag ja die Suffix-Variante lieber.
Code:
double getValueAsDouble() { return doubleVal; }
String getValueAsString() { return stringVal; }
 
Naja die Frage ist ja, wenn das von außen aufgerufen wird, woher soll das Programm wissen, welche der getValue() du gerne hättest? Könntest ja immer einen String zurückgeben und dann parsen oder so ähnlich. Das heißt aber die callende Methode weiß, was sie gerade erwartet.

Edit: Yuuris Lösung würde ich auch bevorzugen. Ist einfach deutlicher.
 
Java hat für sowas doch den "Standard"
Code:
String toString (value)
 
@Tumblewedd, stimmt so habe ich das noch nicht betrachtet.
Ich werde es dann so machen, wie Yuuri es geschrieben hat.

Danke ihr beiden. :)


@Mumpitzelchen
Das geht so nicht. Da muss ich ja laufend zwischen den Typen konvertieren. Das ist so nicht gewünscht.
 
toString() wandelt ja das Objekt in einen String. Er will ja den Wert als String bekommen, da bringt ihm toString() nichts.
 
Vllt. nochmal als einfache Überlegung: Wie sollte Java (oder jede andere Programmiersprache) entscheiden, welche von beiden Methoden du genau ansprechen willst?

Statische Typinferenz (wie aus Scala) hilft hier nur bedingt, also das Schließen aus jeweiligen Verwendung der Methode

Code:
String s = getValue(); // return String
double d = getValue(); // return Double

Aber was machst du bei
Code:
getValue(); // ???

;)
 
Yuuri schrieb:
toString() wandelt ja das Objekt in einen String. Er will ja den Wert als String bekommen, da bringt ihm toString() nichts.

Wenn es semantisch Sinn macht, dass der Wert das Objekt durch toString repräsentiert, dann kann er toString natürlich überschreiben. Genau für solche Sachen ist toString da.
 
Zurück
Oben