Java Reference
In-Depth Information
1 .8 Generische Methoden
Nicht nur Klassen und Schnittstellen, sondern auch Methoden und Konstruktoren können
Typparameter haben. Wir besprechen hier nur generische Methoden; das Gesagte lässt sich
leicht auf generische Konstruktoren übertragen. Um zu verstehen, warum generische
Methoden eingeführt wurden, betrachten wir als Beispiel die Aufgabe, den Inhalt von zwei
GenericClass-Objekten (GenericClass siehe Listing 1.1) auszutauschen. Dies ist z. B. für ein
GenericClass<String>- und ein GenericClass<Integer>-Objekt nicht möglich. Oder anders
formuliert: Dies macht nur Sinn für zwei GenericClass-Objekte, die denselben Typ haben.
Eine Lösung dieses Problems mit Hilfe einer generischen Klasse zeigt Listing 1.4.
Listing 1.4 Generische Klasse zum Austausch des Inhalts zweier GenericClass-Objekte
public class Exchange<T>
{
public void exchange(GenericClass<T> o1,
GenericClass<T> o2)
{
T content1 = o1.getContent();
T content2 = o2.getContent();
o1.setContent(content2);
o2.setContent(content1);
}
}
Damit kann man z. B. den Inhalte zweier GenericClass<String>- und zweier Generic-
Class<Integer>-Objekte austauschen:
GenericClass<String> hallo = new GenericClass<String>();
hallo.setContent("hallo");
GenericClass<String> welt = new GenericClass<String>();
welt.setContent("welt");
Exchange<String> eString = new Exchange<String>();
eString.exchange(hallo, welt);
GenericClass<Integer> i1 = new GenericClass<Integer>();
i1.setContent(47);
GenericClass<Integer> i2 = new GenericClass<Integer>();
i2.setContent(11);
Exchange<Integer> eInteger = new Exchange<Integer>();
eInteger.exchange(i1, i2);
Ein Nachteil ist, dass man für jeden Typ, der als Typargument von GenericClass verwendet
wird (im Beispiel String und Integer), ein eigenes Exchange-Objekt benötigt. So lässt sich
das Exchange-Objekt eString nicht für GenericClass<Integer>-Objekte verwenden:
eString.exchange(i1, i2); //Syntaxfehler
Anders sieht es aus, wenn wir generische Methoden einsetzen. Bei generischen Methoden
ist der Typparameter mit der Methode verknüp . Listing 1.5 zeigt, wie sich das Beispiel aus
Listing 1.4 mit Hilfe einer generischen Methode umsetzen lässt.
 
Search WWH ::




Custom Search