Ich muss prüfen, ob der erste Parameter der Methode List<Class<? extends Exception>>
ist oder nicht. Kann jemand bessere Lösung vorschlagen, als mit einem String zu vergleichen?
Ich meine so etwas:
%Vor% Überprüfen Sie, ob es sich um eine Liste handelt oder nicht. Aber wie kann ich den Class<? extends Exception>
-Teil des Typs überprüfen?
Habe gerade folgendes versucht und es scheint zu funktionieren:
%Vor% Bearbeiten: Okay, diesmal für Reals. Ich gerade jetzt bemerkte, dass es List<Class<? extends Exception>>
und nicht List<? extends Exception>
war. Also sollte diese (hoffentlich) endgültige Lösung tatsächlich zu diesem Fall passen.
Ich denke, dass Sie nach Type Erasure diese Art von Informationen erhalten können.
Wenn Sie nicht wissen, wie das funktioniert, sehen Sie sich die offizielle Dokumentation an: Java-Typ löschen
Kurz gesagt, wenn der Compiler Ihren Code interpretiert, löscht er alle generischen Informationen und ersetzt sie durch die beschränkten Parameter oder durch Object
, wenn sie nicht gebunden sind.
Sie können den Operator instanceof
jedoch verwenden, um nach dem Typ Exception
zu suchen.
Bearbeiten: Wenn Sie einen Parameter überprüfen möchten, bevor Sie die Methode aufrufen, können Sie das Proxy-Muster verwenden. Details hier: Proxy-Muster
Benötigen Sie es speziell List<Class<? extends Exception>>
, oder sind Supertypen (wie Collection<Class<? extends Exception>>
oder sogar Object
) O.K.? Ich frage, weil Sie isAssignableFrom
erwähnen, die nach einer Subtyp-Supertype-Beziehung sucht.
Wenn Sie nach einer Subtyp-Supertype-Beziehung suchen, können Sie etwas tun, was Random Human beschreibt.
Wenn Sie nach einer genauen Übereinstimmung suchen, sollten Sie in der Lage sein, equals
zu verwenden: Die verschiedenen Klassen und Interfaces in der Reflection-API spezifizieren freundliche Definitionen von equals
. Zum Beispiel ParameterizedType
sagt :
Instanzen von Klassen, die diese Schnittstelle implementieren, müssen eine equals () -Methode implementieren, die zwei Instanzen mit derselben generischen Typdeklaration und gleichen Typparametern gleichstellt.
Dies erfordert natürlich ein Beispiel für einen List<Class<? extends Exception>>
-Parameter, dessen Typ Sie erhalten und den equals
Vergleich durchführen können.
(Aber um ehrlich zu sein, die toString
Annäherung, während hackish, sieht nicht so schlecht für mich!)
BEARBEITEN:
F: Wie lese ich die obere Schranke aus Parameterargument?
Zum Beispiel verwenden wir die Methodenbeschreibung
public void testMethod(Collection<? extends Exception);
Zuerst müssen wir auf den Parameter des Methodenparameters
zugreifen %Vor% Von diesem parametrizedType
müssen wir es Argument bekommen:
So weit, so gut, jetzt müssen wir überprüfen, dass diese argumentOfargument
ein Platzhalter ist.
An dieser Stelle haben wir zwei Optionen für die obere:
%Vor%oder für niedriger:
%Vor%Tags und Links java reflection