Die Idee ist es, eine Basisklasse zu definieren, die in abgeleiteten Klassen definierte Methoden aufrufen kann, aber zum Zeitpunkt der Erstellung möchte ich sicherstellen, dass solche Methoden genau nach den Anforderungen definiert sind, dass die Methoden nur ein Argument nehmen, a HashMap <String String
>.Java: Wie generische Klassentypdefinitionen überprüft werden?
Bis jetzt konnte ich mit dem folgenden Code überprüfen, dass die Methode nur einen Parameter enthält und dass es von Class HashMap ist, aber wie kann ich überprüfen, dass die generische Definition <String, String
>?
public boolean isMethodParameterValid(final Method method) {
final Class<?>[] parameters = method.getParameterTypes();
return ((parameters.length == 1) && parameters[0].isAssignableFrom(HashMap.class));
}
Nicht alle Typen werden gelöscht. Ein anderes Beispiel wäre 'new ArrayList {}'. Neal Gafters Super Type Token Post ist ebenfalls lesenswert: http://gafter.blogspot.com/2006/12/super-type-tokens.html –
johnstok
Nein, Neals Gafters Super Type Token werden zur Kompilierzeit gelöscht. Sein Trick hilft beim Zugriff auf den Typ, mit dem das generische Objekt zur Laufzeit instanziiert wird (da Type.getClass() autorisiert ist). – JVerstry