2008-12-18 8 views
7

j'ai écrit une annotation java qui ressemble à ceci:Puis-je générer une erreur de compilation en fonction du type du champ étant annoté

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.FIELD) // can I further limit this to only fields of type DomainObject? 
public @interface Owns { 
} 

Après avoir brièvement autour je ne pouvais pas voir s'il y avait un manière de limiter davantage l'utilisation de cette annotation afin que seuls les champs d'un type spécifique puissent être annotés. Cette annotation est personnalisée pour notre domaine et ne peut être utilisée que sur des instances de notre classe d'objets de domaine de base.

Est-ce que quelqu'un sait comment appliquer ceci au moment de la compilation?

Merci pour toute aide!

Répondre

8

Vous pouvez émettre une erreur dans un annotation processor (vous devrez utiliser un private API si vous souhaitez prendre en charge Java 5). Vous pouvez utiliser le Messager provenant du ProcessorEnvironment transmis à init.

L'efficacité dépend de votre chaîne d'outils. Cela devrait être bon si vous utilisez javac pour compiler par la ligne de commande ou via un script de construction. Dans ma version d'Eclipse, je devais activer les processeurs d'annotation manuellement pour le projet (via les paramètres du projet) et les erreurs n'apparaissaient nulle part. (Les plugins d'annotation JDT ont des points d'extension qui permettent une meilleure intégration avec l'IDE si vous voulez fournir un support personnalisé.) Il serait payant de vérifier avec les outils couramment utilisés, surtout si vous avez besoin de supporter des environnements de développement arbitraires.

+0

C'est l'information que je cherchais. Je vais creuser et voir si cela vaut la peine d'ajouter ces vérifications. Merci. –

0

Je crois que cela n'est pas applicable au moment de la compilation - Si vous voulez vous assurer que ce n'est pas sur des champs inappropriés, vous devez vérifier à l'exécution/temps de chargement.

Questions connexes