2010-07-01 5 views
3

Est-il possible de limiter uniquement les annotations à une liste? Alors disons que j'ai deux annotations:Autoriser uniquement les annotations dans une liste

(1) Foo.class 
(2) Bar.class 

Lors de la déclaration d'une liste, je veux seulement permettre l'inclusion des annotations, mais tout le reste se traduire par une erreur de compilation:

List<Something> list = new ArrayList<Something>(); 
list.add(Foo.class); 
list.add(Bar.class); 
list.add(String.class); // bad 

Si ce qui précède est-il même possible, est-il alors possible de le restreindre aux types d'annotations? J'entends par là uniquement les annotations groupées d'une manière ou d'une autre. Par exemple, si j'ai les annotations suivantes:

(1) Shark.class 
(2) GoldFish.class 
(3) Lion.class 

Et je veux seulement permettre des annotations qui vivent dans l'eau. Par conséquent, l'ajout de Lion.class à la liste entraînerait une erreur de compilation en raison de son comportement amoureux des terres.

Répondre

6

Je ne suis pas sûr d'avoir compris votre question, mais je suppose que vous en avez besoin:

List <Class <? extends Annotation>> x 
    = new ArrayList <Class <? extends Annotation>>(); 

À propos de la deuxième partie: Je suppose que non, parce que les interfaces d'annotation ne peuvent pas étendre les uns des autres.

+0

Merci, après un peu plus de jeu, j'ai trouvé la solution à la première partie du problème. Et oui, je ne pensais pas que la deuxième partie était possible, car les interfaces ne permettaient pas le sous-typage. Merci pour la réponse! – digiarnie

Questions connexes