2012-02-20 6 views
3

Supposons ce qui suit. Il y a une superclasse ou une interface déclarant une méthode: Base.doSmth(). Il existe également une classe héritée implémentant cette méthode: Inherited.doSmth(). Nous avons la réflexion (Method) du Inherited.doSmth() et nous savons quelle est la classe de base afin que nous puissions accéder à sa réflexion (Base.class). La question est: comment obtenir la réflexion sur la méthode Base.doSmth()? Bien sûr, nous pouvons parcourir toutes les méthodes de Base et en trouver un par nom, par paramètres et par type de retour, mais peut-être y a-t-il déjà une solution. Tout se passe dans une classe liée à Spring, donc le code est déjà couplé à Spring, donc utiliser ses utilitaires est correct.Comment obtenir la méthode déclarée dans une classe parente spécifique?

Merci.

Répondre

0

Vous pouvez utiliser public native Class<? super T> getSuperclass(); pour accéder aux métadonnées super classe, puis utiliser public Method[] getMethods() throws SecurityException pour accéder aux métadonnées de ses méthodes.

+0

C'est OK, bien sûr, mais je pense qu'il peut y avoir une certaine méthode util de Spring qui rend ce travail, comme 'org.springframework.aop.support.AopUtils.getMostSpecificMethod()'. –

+1

oh, Spring n'a aucune méthode d'utilité (mai je ne sais pas) mais Apache Commons Lang3 ont une classe utilitaire avec le nom ClassUtils et cette classe a la méthode avec getAllSuperclasses, et d'autres méthodes utiles, peut-être cette classe utile pour vous . – MJM

+0

Merci MJM, j'étudierai Apache Commons Lang, sinon fais en itéraçant manuellement le tableau 'Method []'. –

Questions connexes