Ich versuche, den Prototyp einer Java-Funktion zu schreiben, die mit einer beliebigen Anzahl von Ganzzahlen und Strings aufgerufen werden kann:
%Vor%Idealerweise hätte ich gerne die Ints und Strings in beliebiger Reihenfolge (und möglicherweise gemischt):
%Vor%Ich habe daran gedacht Varargs zu verwenden, aber es kann nur einen im Prototyp geben. Eine andere Idee, die ich hatte, ist, den folgenden Prototyp zu verwenden:
%Vor% ... aber ich denke, dass es einen Kompilierungsfehler geben sollte, falls er mit etwas anderem als den erwarteten Typen aufgerufen wird. Natürlich könnte eine Laufzeitprüfung ( instanceof
) durchgeführt werden, aber das wäre keine sehr elegante Lösung, oder?
Wie würdest du es tun?
Es gibt in der Programmiersprache Java keine Möglichkeit, es zum Laufen zu bringen, so dass Sie eine beliebige Anzahl von Zeichenfolgen und Ganzzahlen übergeben können und der Compiler einen Fehler gibt, wenn Sie etwas anderes als eine Zeichenfolge oder Ganzzahl übergeben. p>
Wenn Sie möchten, dass es typsicher ist, würde ich damit gehen:
%Vor%Und dann erstellen Sie Ihre Ding-Klassen:
%Vor%Ich überlasse es Ihrer Fantasie, herauszufinden, wie man StringThing schreibt. Natürlich, verwenden Sie einen besseren Namen als "Ding", aber ich kann Ihnen nicht helfen.
Sie machen dann zwei statische Methoden:
%Vor% Dann wickeln Sie jedes Objekt in einem Aufruf von thing
:
Unordentlich? Jep. Leider hat Java nicht die Fähigkeit, dieses Zeug wie andere Sprachen zu verstecken. Scalas implizite Werte würden dir hier helfen, aber das bringt ein ganzes Bündel anderer Probleme mit sich. Persönlich würde ich mit den instanceof
checks gehen, aber dieser wird sicherstellen, dass Ihr Code zur Kompilierzeit sicher ist.
Die einzige mögliche Lösung für das von Ihnen beschriebene Problem ist die bereits erwähnte, bei der die Funktion ein varargs-Argument vom Typ Object
annimmt. Dies liegt an der Einschränkung in Java, wo es nur einen Vararg in einer Methodensignatur geben kann und dass es der letzte Parameter sein muss.
Es ist schwer zu sagen, was eine alternative elegante Lösung sein könnte, ohne die Details dessen zu kennen, was Sie mit myMethod
machen wollen.
Die Syntax ist erlaubt
%Vor% Die Typvariable T
erlaubt Typen, die Subtypen von Number
und List
vom gleichen Typ sind (zum Beispiel Typen, die mehrere Schnittstellen implementieren).
Tags und Links java variadic-functions