Java: Comment vérifier classe générique des définitions de type de?
L'idée est de définir une classe de base qui peut invoquer des méthodes définies dans derrived classes, mais au moment de la création je veux m'assurer que de telles méthodes sont définies exactement selon les exigences, qui est que les méthodes ne prendre qu'un seul argument, un HashMap<String String
>.
Jusqu'à présent j'ai pu avec le code suivant pour vérifier que la méthode ne contient qu'un seul paramètre et qu'il est de la Classe HashMap, mais comment puis-je vérifier que la définition générique est <String, String
> ?
public boolean isMethodParameterValid(final Method method) {
final Class<?>[] parameters = method.getParameterTypes();
return ((parameters.length == 1) && parameters[0].isAssignableFrom(HashMap.class));
}
Vous devez vous connecter pour publier un commentaire.
En effet, il est le type d'effacement, mais il n'est pas appliqué aux variables/champs - seulement les définitions de classes où le type de paramètres sont effacés et remplacés par le haut de leurs limites.
Cela signifie que ce que vous demandez peut être atteint. Voici comment vous pouvez inspecter le générique params du premier paramètre d'une méthode:
Vous ne pouvez pas. Java les types génériques sont "effacées" par le compilateur, c'est à dire
HashMap<String, String>
devient justeHashMap
au moment de l'exécution. Voir cette question.new ArrayList<String>{}
. Neal Gafter Super jetons de Type post est intéressant à lire aussi: gafter.blogspot.com/2006/12/super-type-tokens.htmlJe n'ai pas vraiment à comprendre le but de ce que vous essayez de faire. J'ai le sentiment qu'il devrait être possible de vérifier au moment de la compilation par les soigneusement la conception de votre hiérarchie de classe. Mais sans plus de détails sur le problème que vous essayez de résoudre, je ne peux pas vous aider.
Comme l'a noté, lors de l'exécution, vous ne pouvez pas regarder le générique de la part d'un type.
Est-il une raison pour laquelle il vous suffit de définir une méthode abstraite comme dans le Modèle de Modèle?
Ensuite, la vérification sera faite de manière statique.
(qui est également là d'une raison pour exiger HashMap sur la Carte?)