2017-03-29 1 views
1

J'ai une classe abstraite contenant la méthode run() et quelques classes enfants remplaçant la méthode run avec une implémentation différente. Il existe également une classe d'annotation personnalisée, chaque classe enfant a cette annotation avec une valeur différente pour distinguer chaque classe enfant. Je devais appeler cette méthode d'exécution pour chaque classe enfant à partir de l'objet de classe abstraite en utilisant ces annotations sans utiliser de nom de classe enfant. Est-il possible ou existe-t-il un autre moyen de le faire?Appel d'une méthode enfant particulière à partir d'une classe abstraite à l'aide d'annotations personnalisées

CODE EST ICI -------

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.TYPE) 
public @interface CustomAnno { 
    public String name(); 
} 

public abstract class AbstractClass { 

    abstract void run(); 

} 

@CustomAnno(name="one") 
public class ExtendingClassOne extends AbstractClass { 

    @Override 
    void run() { 
     System.out.println("class one extending"); 

    } 

} 

@CustomAnno(name="two") 
public class ExtendingClassTwo extends AbstractClass { 

    @Override 
    void run() { 
     System.out.println("class two extending"); 

    } 

} 

Donc, avoir une classe abstraite et les valeurs annotation « un » et « deux », puis-je appeler la méthode courir pour chaque classe enfant sans utiliser le nom de classe enfant .

+0

Je n'ai pas compris votre question complètement. Mais vous attendez quelque chose comme ça? 'AbstractClass child1 = \\ instance de ExtendingClassOne; child1.run(); AbstractClass child2 = \\ instance de ExtendingClassTwo; child2.run(); 'Pouvez-vous donner un exemple? – prasanth

+0

Merci pour votre réponse mec. Ici, pour appeler la méthode run de la classe enfant, nous devons l'initialiser avec son Object. Je souhaite appeler la classe enfant à l'aide des annotations et de la classe Résumé uniquement. Quelque chose comme, nous pourrions charger toutes les annotations avec leurs classes enfants à l'exécution. L'avez-vous eu maintenant? –

+0

Ouais. Je peux comprendre. – prasanth

Répondre

2

Nous pouvons utiliser la bibliothèque de ressorts ClassPathScanningCandidateComponentProvider pour lister toutes les classes qui utilisent un type particulier d'annotation. Ici les annotations peuvent être personnalisées ou par défaut. Ainsi, mettre des annotations sur toutes les classes enfants qui étendent cette classe abstraite peut donner uniquement la liste de ces classes enfants. Cela a résolu mon problème.