Mehrere Objekttypen für Varargs in einem Methodenprototyp?

8

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?

    
executifs 12.06.2011, 13:13
quelle

6 Antworten

5

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>     

Jesper 12.06.2011, 13:17
quelle
6

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 :

um %Vor%

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.

    
Samir Talwar 12.06.2011 13:22
quelle
3

Es gibt keine Möglichkeit, Generika zu verwenden, um zwei Typen zu vergleichen, zB

%Vor%     
Bohemian 12.06.2011 13:19
quelle
1

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.

    
Navin Peiris 12.06.2011 13:23
quelle
1

(Workaround)

Hinzufügen zu Ihrer lib:

%Vor%

In Ihrem Programm:

%Vor%

(Viele Codierungsstilregeln werden verletzt) ​​

    
Fai Ng 10.07.2013 21:19
quelle
0

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).

    
Welyab Paula 23.06.2017 21:04
quelle

Tags und Links