Java: Wie zu überprüfen generischen Klasse geben Sie die Definitionen?
Die Idee ist die Definition einer Basisklasse aufrufen können Methoden definiert werden, die in derrived Klassen, aber zum Zeitpunkt der Erstellung möchte ich sicherstellen, dass solche Methoden definiert sind, die genau nach den Anforderungen, die von den Methoden nur ein argument, eine HashMap<String String
>.
Bisher konnte ich mit folgendem code zu überprüfen, dass die Methode enthält nur einen parameter und das ist der Klasse HashMap, aber wie kann ich überprüfen, dass die generische definition ist <String, String
> ?
public boolean isMethodParameterValid(final Method method) {
final Class<?>[] parameters = method.getParameterTypes();
return ((parameters.length == 1) && parameters[0].isAssignableFrom(HashMap.class));
}
InformationsquelleAutor | 2009-01-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Tat, es ist type erasure, aber es wird nicht angewendet, um die Variablen/Felder - nur um Definitionen von Klassen, in denen die Typ-Parametern werden gelöscht und ersetzt mit Ihrer oberen Schranken.
Dies bedeutet, dass das, was Sie fordern, erreicht werden kann. Hier ist, wie Sie überprüfen können, die generischen Parameter der erste parameter einer Methode:
InformationsquelleAutor Itay Maman
Können Sie nicht. Java-generische Typen sind "gelöscht" durch den compiler, d.h.
HashMap<String, String>
wird nurHashMap
zur Laufzeit. Sehen diese Frage.new ArrayList<String>{}
. Neal Gafter ' s Super Type tokens post ist es Wert, gelesen zu werden: gafter.blogspot.com/2006/12/super-type-tokens.htmlNein, Neals Gafter super Typ token WERDEN gelöscht, zur compile-Zeit. Sein trick helfen, den Zugriff auf den Typ zu instanziieren der generischen, zur Laufzeit (da Typ.getClass() berechtigt ist).
InformationsquelleAutor Dave Ray
Ich nicht wirklich verstehe, ist das Ziel von dem, was Sie zu tun versuchen. Ich habe das Gefühl, dass es möglich sein sollte, zu überprüfen, dass zur compile-Zeit durch die sorgfältige Gestaltung Ihrer Klassen-Hierarchie. Aber ohne mehr details über das problem, das Sie lösen möchten, ich kann Ihnen helfen.
InformationsquelleAutor Guillaume
Wie bereits erwähnt, zur Laufzeit können Sie nicht Blick auf den generischen Anteil eines Typs.
Gibt es einen Grund, können Sie einfach definieren Sie eine abstrakte Methode wie in der Vorlage-Muster?
Dann die überprüfung erfolgt statisch.
(auch gibt es einen Grund, zu verlangen, HashMap, nur die Karte?)
InformationsquelleAutor Kathy Van Stone