Dies wurde kürzlich in einem Interview als Frage gestellt, die ich dem Kandidaten gestellt habe und die er sich für die Java-Sprache gewünscht hätte. Es ist allgemein bekannt, dass es als störend empfunden wird, dass Java keine reifizierten Generika hat, aber als ich genauer nachfragte, konnte der Kandidat mir eigentlich nicht sagen, welche Art von Dingen er hätte erreichen können, wären sie vorhanden.
Offensichtlich können aufgrund der zulässigen Raw-Typen in Java (und unsicherer Überprüfungen) die Generika umgangen werden und es kann sich so ergeben, dass eine List
(zum Beispiel) tatsächlich String
s enthält. Dies könnte offensichtlich unmöglich gemacht werden, wenn Typinformationen reif wären; aber es muss mehr geben als das!
Könnten Personen Beispiele posten von Dingen, die sie wirklich tun würden, wenn reifizierte Generika verfügbar wären? Ich meine, offensichtlich könnten Sie den Typ einer List
zur Laufzeit erhalten - aber was würden Sie damit tun?
public void foo(List l) {
if (l.getGenericType() == Integer.class) {
//yeah baby! err, what now?
BEARBEITEN: Ein schnelles Update zu diesem Thema, da die Antworten hauptsächlich darauf abzielen, dass die Notwendigkeit besteht, eine Class
als Parameter zu übergeben (zum Beispiel EnumSet.noneOf(TimeUnit.class)
). Mir ging es mehr darum, etwas in der Art aufzuzeigen wo dies einfach nicht möglich ist. Zum Beispiel:
List l1 = api.gimmeAList();
List l2 = api.gimmeAnotherList();
if (l1.getGenericType().isAssignableFrom(l2.getGenericType())) {
l1.addAll(l2); //warum um alles in der Welt würde ich das überhaupt tun?