Dynamische Rückgabe Geben Sie die Java-Methode ein

8

Ich habe hier eine ähnliche Frage mehrmals gesehen, aber es gibt einen großen Unterschied.

In den anderen Fragen soll der Rückgabetyp durch den Parameter bestimmt werden. Ich möchte / muss den Rückgabetyp anhand des analysierten Werts von byte[] ermitteln. Nach dem, was ich gesammelt habe, könnte Folgendes funktionieren:

%Vor%

Ich möchte nur sicherstellen, dass dies eine Chance hat zu arbeiten, bevor ich etwas vermassele. Vielen Dank im Voraus.

    
Jon 19.11.2011, 02:57
quelle

4 Antworten

10

Sie können es nicht tun. Java-Rückgabetypen müssen entweder ein fester Grundtyp sein oder eine Objektklasse. Ich bin mir ziemlich sicher, dass Sie nur einen Wrappertyp zurückgeben können mit Methoden zum Abrufen verschiedener möglicher Arten von Werten und einer internen Enumeration was sagt, welches ist gültig.

--- edit --- nach Daniets Korrektur!

%Vor%

Sie erleiden immer noch einige Strafen für Boxen und Typprüfungen die zurückgegebenen Werte und natürlich, wenn Ihr Anruf nicht konsistent ist Was die Implementierungen von getParam tatsächlich tun, Sie erhalten eine Klasse Cast Ausnahme.

    
ddyer 19.11.2011, 03:25
quelle
18

Dieser CAN ist erledigt. Der folgende Code funktioniert:

%Vor%

Durch die Verwendung eines generischen Typs für den Rückgabetyp kann jede Java-Methode dynamisch alle Objekte oder primitiven Typen zurückgeben. Du kannst das Generische benennen, was immer du willst, und in diesem Fall habe ich es 'Any' genannt. Mit diesem Code vermeiden Sie, den Rückgabetyp beim Aufruf der Methode zu übergeben. Sie würden die Methode wie folgt verwenden:

%Vor%

Das Beste, was Sie ohne diesen Trick tun können, ist das manuelle Umwandeln eines Objekts:

%Vor%

Java dynamische Rückgabetypen können den Boilerplate-Code reduzieren. Hier ist ein schnelles Beispiel , das ich in Java 8 geschrieben habe.

    
Danieth 28.08.2013 12:51
quelle
11

Ich weiß nicht, worüber diese Leute reden. Sie verlieren die Typsicherheit, was ein Problem ist, aber Sie könnten dies leicht mit Generika erreichen ... etwas wie:

%Vor%

oder

%Vor%

Letzteres fördert die Möglichkeit eines Strategie-Patterns . Übergeben Sie die Bytes an die Strategie, lassen Sie sie ausführen und rufen Sie die Ausgabe ab. Sie hätten eine Byte-Strategie, eine Boolesche Strategie usw.

%Vor%

dann

%Vor%

Ihr Beispielcode ist jedoch ein schlechter Anwendungsfall und ich würde es nicht empfehlen. Deine Methode macht keinen Sinn.

    
hisdrewness 19.11.2011 04:20
quelle
1

Wenn Sie wirklich nur boolean oder float zurückgeben, dann ist Object das Beste, was Sie tun können.

Wenn Sie variable Objekte zurückgeben, müssen Sie einen Rückgabetyp mit der kleinsten gemeinsamen Oberklasse auswählen. Primitive haben keine Superklasse, aber sie werden in Objektrepräsentationen eingereiht (wie Boolean und Float ), die eine gemeinsame Oberklasse von Object haben.

    
Kane 19.11.2011 03:19
quelle

Tags und Links