In Java, Wie kann ich wieder ein String oder ein double-je nach Umstand der Methode? Ist es möglich?
Ich habe zum Beispiel eine Methode, die aussieht, durch einen string, für Daten (getrennt durch einen angegebenen deliminator, aber einige Elemente möglicherweise einen Namen, und andere Gegenstände sein könnte zahlen.
Wenn ein Benutzer ruft meine Methode zum zurückgeben Artikelnummer X aus der deliminated Liste, ich will es geben eine Zeichenfolge zurück, wenn Element X ist ein name, oder ein Doppelzimmer, wenn Element X eine Zahl ist.
Beispielsweise objectName.get(5);
bekommen würde, das 5. Element in der deliminated Liste.
Würde ich irgendeine Art von überlastung?
Oder würde ich stattdessen etwas tun, wie objectName.getDouble(5);
und objectName.getString(5);
basiert auf der Tatsache, dass der Benutzer weiß, was Element 5 ist?
Aber was ist, wenn der Benutzer nicht weiß, was Element 5 ist? Er braucht nur ein String oder ein Double-je nachdem, was es passiert zu sein.
InformationsquelleAutor trusktr | 2010-10-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein Weg, um dies zu tun:
Beachten Sie, dass diese zurück
Double
wrapper statt einerdouble
.Ich glaube nicht, dass das eine gute Idee ist, aber, da der Anrufer jetzt zum testen, der Typ des zurückgegebenen Werts und eine Typumwandlung zu tun etwas mit ihm.
Für die Aufzeichnung, Java funktioniert nicht zulassen, dass eine Methode für die Rückgabe einer
String
oderdouble
weil diese Typen nicht haben einen gemeinsamen obertyp, der in den Java-Typ-system.Wenn Ihr Rückgabetyp ist Object, Sie können alles zurückzugeben, was von dieser Methode erbt von der Object-Basisklasse. Das problem ist, dass die Anrufer nicht wissen, welche Art Sie zurückgegeben haben, so der Anrufer zu tun haben, die überprüfung von Typ und einen cast zu bekommen, etwas nützliches aus dem return-Wert. Es ist nichts falsch mit, dass, aber gibt es wahrscheinlich eine sauberere Weg, es zu tun.
Nein. Ich meine, wenn der code ruft den Wert braucht, um etwas zu tun mit es das hängt von Ihrer Art, dann geben Sie es Stimmen. Natürlich, einige Dinge verlassen Sie sich nicht auf das zurückgegebene Objekt Typ; z.B. die Zuordnung zu einem anderen
Object
variable, oder rufen SietoString()
.Ich habe auch "miss" PHP runtime überraschungen in komplexen Anwendungen 🙂
Nein - unbox funktioniert hier nicht, ohne eine Typumwandlung. So
double d = (Double) x.get();
. Und natürlich die festgelegten Umständen eine ungeprüfte Ausnahme.InformationsquelleAutor Stephen C
Für diese Art der Sache, ich benutze lieber etwas wie die Vielleicht/Option Muster aus der funktionalen Programmierung camp. Sie am Ende mit einer Schnittstelle wie:
Diese Kräfte, die das Problem für den Kunden, dass es immer eine Plausibilitätsprüfung, dass es war in der Tat ein double-oder String-in der entsprechenden Zeit. In deinem Fall würde ich nur eine get () - Methode, also wenn der client (denkt Sie) weiß, was der Typ ist, der Anruf
und in Ihrem get(int) Methode, anstelle der Rückgabe ein String oder ein double, das die return-Anweisung sieht wie
Es ist ein wenig mehr Arbeit nach vorne, aber es bezahlt hat, der für mich in der Vergangenheit mehrfach.
Hier ist, wie Sie verwenden würden, es zu bauen (Achtung - dies war nicht in der Nähe von einem compiler)
und hier ist, was der Kunde sieht, wie
Ich würde damit rechnen, würden Sie bekommen viel mehr aus, wenn Sie versucht, es zu bekommen, um zu kompilieren, und dann spielte mit ihm in einem debugger. Die bit-wollen Sie erklären? Es gibt nicht viel mehr Kontext in deiner Frage zu erläutern.
Das ist ein cleverer trick. Ich werde dich daran erinnern.
Ich denke, ich weiß einfach nicht genug Java noch nicht einmal wissen, was zu Fragen, hehe. Habe ich gemacht, JAVA nur für 4 Wochen. Ich werde auf jeden Fall halten diese in praktisch, wenn. Jetzt hab ich nur ausgegeben, Streicher und lassen den client konvertieren verdoppeln, wenn er will.
Burleigh Tragen, ich bekam nie die chance, es auszuprobieren... ich bin sicher, ich weiß sogar, wie man die Klasse verwenden. Kannst du ein Beispiel?
InformationsquelleAutor Burleigh Bear
Wenn du dies tun musst, dann gibt es problem mit dem design. Da die ursprüngliche Datenquelle ist die Zeichenfolge, die Sie haben, zu akzeptieren, dass alle zurückgegebenen Werte Zeichenfolge und lassen Sie es an den client, um zu überprüfen, ob das Ergebnis in eine Zahl umgewandelt werden.
Wenn Sie möchten, speichern Sie die client-zu tun, die überprüfen, können Sie ihn mit einer minimalen API, die eventuell so etwas wie:
InformationsquelleAutor cherouvim
Die Java-Sprache nicht aussetzen einer überlastung der Rückgabetyp einer Methode. (Wie Thilo wies darauf hin, dies ist eine Einschränkung der Sprache Java und nicht die JVM/bytecode.)
In der Regel diese Art der Sache nicht zu passen gut in die Java-Typ-system. Man könnte sich vorstellen, eine Rückkehr
Either<String,Double>
Typ (restriktiver Typ zurückgegeben, alsObject
wie vorgeschlagen von Stephen C und einen allgemeineren Typ als DoubleOrString wie bereits von B. Bär), aber der Allgemeine Aufwand, der erforderlich ist, um solch ein Konstrukt in Java führt in der Regel zu einfach mit mehreren Methoden, z.B.getString(...)
undgetDouble(...)
.Wie das genau funktioniert, dass Entweder Art der Arbeit?
es ist hypothetische.
Oh, gotcha. (foobar)
"Der Java-Sprache nicht aussetzen einer überlastung der Rückgabetyp einer Methode." Die JVM jedoch diese Funktion unterstützen.
InformationsquelleAutor