Quel est le point de paquet les annotations?
Je comprends l'objectif de la classe d'annotations, grâce à Comment et où sont les Annotations de Java?. Quel est le but de package annotations, comme décrit dans ce blog et §7.4.1 de la Spécification du Langage Java?
Pourquoi voudriez-vous d'associer des métadonnées à un package? Quels sont les types de choses que vous pouvez faire?
Vous devez vous connecter pour publier un commentaire.
Je suppose que
@Deprecated
aurait du sens. Et peut-être quelque chose comme@Generated
si l'ensemble du paquet a été généré par un outil de non-source Java. Ou@Internal
si ce paquet n'est pas partie d'une API publique.Peut-être OSGi outils (où vous avez besoin de déclarer les versions de vos paquets et les paquets dont vous dépendez) pourraient l'utiliser, trop.
Quelqu'un a vu ces sauvages?
Deux raisons que je peux penser:
Class.getAnnotations()
.JAXB par exemple permet la plupart des annotations qui sont normalement utilisés sur un type tout aussi bien s'appliquer à un package. Le sens dans ce cas serait de spécifier la valeur par défaut pour toutes les classes de ce package.
Par exemple, si vous voulez toutes les propriétés de toutes les classes dans un package qui sont exposées via des accesseurs/mutateurs pour être mappées dans le XML, vous pouvez spécifier
@XmlAccessorType(XMLAccessType.PROPERTY)
sur chaque classe ou simplement l'indiquer sur le paquet.Ce n'est pas l'objet réel, mais je suis en les utilisant comme une solution de contournement pour éviter la recompilation de l'package-info.java les fichiers.
Le problème est que
javac
(et la tâche Ant<javac>
) ne crée pas de fichier de classe pour le package-info.java si ce n'est que de la documentation (la raison de leur existence) et lapackage bla;
déclaration, et que la tâche ant recompile tous les fichiers pour lesquels il n'existe pas (ou plus) correspondant.class
fichier.L'ajout d'un mannequin d'annotation là (comme
SuppressWarnings
) a eu pour effet qu'unpackage-info.class
est produite et donc le fichier n'est pas recompilé jusqu'à ce que de nouveau changé.(Ant 1.8.0 résolu ce problème en créant un vide package-info.class même si il n'y avait pas d'annotation, mais je suis en utilisant une ancienne
ant
ici.)Test de métadonnées -- c'est métadonnées autour de forfait de tests (tests unitaires ou autre). Vous pouvez attribuer différentes pièces de test de métadonnées qui sont appropriées au niveau du package, tels que: les caractéristiques, les propriétaires, les versions, les bugs/problèmes, etc. Celles-ci pourraient être raffiné à la classe ou au niveau de la méthode, mais ayant paquet au niveau des définitions ou des valeurs par défaut peut être pratique pour des raisons de concision. J'ai utilisé une variante de cette approche (avant que la prestation des annotations).
Un argument similaire peut être faite pour l'généralisée code de métadonnées autour des mêmes sortes de choses: les fonctions, à la propriété, des défauts, des informations historiques, etc.