Ich habe diese Methode, deren eindeutiger Parameter (List elements)
Elemente zu einem ListModel setzt, aber ich muss eine Validierung durchführen, um zu sehen, ob der generische Typ vergleichbar ist und so etwas wie:
ist illegal, ich weiß nicht, wie man die richtige Validierung durchführt.
Ich habe diese Validierung bereits durchgeführt mit:
%Vor%Aber ich möchte wissen, ob es eine sauberere Lösung dafür gibt, zum Beispiel mit Reflektion?
Vielen Dank im Voraus.
Der generische Typ einer Liste ist zur Laufzeit gelöscht . Damit dies funktioniert, müssen Sie entweder den Parameter in der Methodensignatur anfordern oder jedes Element einzeln testen.
%Vor%ODER
%Vor%Wenn Sie die Kontrolle über den Code haben, wird ersterer bevorzugt und sauberer; Der letztere kann bei Bedarf in einen Aufruf der Dienstprogrammmethode eingeschlossen werden.
Ich bin kein Generics-Guru, aber nach meinem Verständnis ist der Grund dafür, dass zur Laufzeit kein Unterschied zwischen einem ArrayList
und, sagen wir, einem ArrayList<String>
besteht. Es ist also zu spät, um den gewünschten Test durchzuführen.
Warum deklarieren Sie Ihre Methode nicht so, dass sie eine List<? extends Comparable>
anstelle von List
akzeptiert?
Insbesondere die Art und Weise, wie Sie Ihre Frage formuliert haben, lässt es so klingen, als würden Sie erwarten, dass die Liste immer homogene Elemente enthält, aber ein einfaches altes List
gibt Ihnen keinerlei Sicherheit das.
Zu Ihrem Update: einfach sicherstellen, dass ein Element Comparable implementiert ist nicht genug (was ist, wenn die anderen nicht?) Und sicherzustellen, dass alle Elemente implementieren Comparable ist auch nicht genug zu validieren (was ist, wenn sie sind von verschiedenen Klassen, die vergleichbar implementieren, aber nicht miteinander vergleichen können?).
Aber die größere Frage ist, warum sollte man sich zur Laufzeit trotzdem überprüfen lassen? Welchen Nutzen hat das im Vergleich zu dem Versuch, es zu verwenden und dann zu sehen, dass es fehlschlägt (d. H. Eine Exception auslöst, die Sie vielleicht fangen können)?
Tags und Links java generics instanceof syntax