2009-09-02 5 views
1

J'ai une classe de base que toutes mes classes de domaine étendent, par exemple:Comment faire pour déterminer une classe parente dans Grails

class Customer extends IbidemBaseDomain { 

. . 

} 

Est-il possible au sein de ma classe de base pour déterminer quelle classe est PROLONGER. Donc, dans cet exemple, est-il possible que IbidemBaseDomain sache qu'il est étendu par le client?

+0

Combien devez-vous savoir? et pourquoi? Une classe de base ayant besoin de savoir qui l'étend peut être potentiellement une odeur de code (pas toujours, voir java enum par exemple). – Chii

Répondre

5

j'ai écrit une classe utilitaire chercheur classpath un certain temps qui a pris fin en JMeter - voir http://kickjava.com/src/org/apache/jorphan/reflect/ClassFinder.java.htm

Mais pour les classes de domaine Grails, vous pouvez limiter la recherche en accédant aux classes de domaine de la GrailsApplication. Donc, en supposant que vous avez la fève de printemps « grailsApplication » (via DI ou autre), vous pouvez trouver toutes les classes via:

def domainClassClasses = grailsApplication.domainClasses.collect { it.clazz } 

et les utiliser pour faire isInstance() appelle ou naviguer autrement la hiérarchie des classes.

+0

Cela a certainement aidé. Je n'ai vraiment besoin de m'inquiéter quand j'ai affaire à un client, donc tout ce que j'ai à faire est quelque chose comme: if (this.class == org.maflt.ibidem.Customer) { log.debug "Traitement un client " } else { log.debug" traitant $ {this.class} " } –

2

Voir this question Cela s'applique à Groovy ainsi qu'à Java, et il ne semble pas possible de faire ce que vous voulez sans utiliser de bibliothèques qui ne font pas partie du langage Java ou Groovy.

+1

+1: Groovy _is_ Java. –

Questions connexes