2013-10-15 14 views
6

Ich möchte einen generischen Typ Safe Observer in Java schreiben. In C++ kann ich es leicht von variadische Vorlage von C++ 11 verwendet wird, wie folgt:Äquivalent von C++ variadischen Vorlagen in Java

class Observer<typename... T> 
{ 
    void update(T... args); 
}; 

nun in Java, ist das Beste, was ich tun konnte:

class Observer<T> 
    { 
     void update(T args); 
    }; 

Jetzt Update kann nicht mehrere Argumente verschiedener Typen wie in C++ annehmen. Könnte jemand eine Lösung für dieses Problem vorschlagen?

Vielen Dank im Voraus.

+0

Ich verstehe Ihr Problem nicht wirklich. Warum nicht 'void update (T ... args);'? – Daniel

+1

Nicht alle Argumente sind in seinem Anwendungsfall notwendigerweise vom gleichen Typ. –

Antwort

4

Wenn alle Argumente ausfahren/implementieren T können Sie sagen:

class Observer<T>{ 
     void update(List<? extends T> args){} 
} 
+2

Dies würde nur "List " statt Subtypen erlauben. Sagen wir zum Beispiel: "T" ist "Nummer"; Dieses Konstrukt würde keine "Liste " als Parameter zulassen. Ich würde sagen: "Liste " wäre angemessener. –

+0

Danke für den Rat. Ich habe meine Antwort aktualisiert –

0

Das einzige, was in den Sinn kommt, ist Klasse wie Tupel erstellen, so dass Sie nicht variadische Form nicht verwenden, aber Gruppe args vorher. Diese Antwort hängt jedoch stark vom Verwendungsszenario ab.
Es gibt kein Eins-zu-Eins-Analog.

Verwandte Themen