Lors de l'analyse de certains fichiers XML, je rencontre une situation que je dois utiliser l'interface comme étiquettes pour identifier que certaines tags appartiennent à certaines catégories, par exemple, j'ai créé une interface Puis je trébuche dans cette page: http://xahlee.org/java-a -day / interface.html (veuillez rechercher l'interface " comme étiquettes em>" session.). Il dit: p>
Le gist du problème est qu'il est
un morceau de perturbation mathématique dans
la langue. En tant que mécanisme d'étiquetage
dans une langue, pour le possible
bénéficier de l'ingénierie logicielle
perspective, alors il ne devrait pas être
conçu dans le cadre de la classe
Interface, depuis le concept de
étiquetage et concept de programmation
l'interface, sont sémantiquement disparates. P>
blockQuote>
Ainsi, l'interface est-elle comme des étiquettes nécessairement une mauvaise pratique? En tant que programmeur Java, avons-nous d'autres alternatives? P>
3 Réponses :
interfaces car les marqueurs ont été largement remplies par le mécanisme d'annotation de Java 5 ou ultérieure. Ils vous permettent d'ajouter des métadonnées arbitraires. Si vos interfaces sont vides et que vous servez uniquement à agir en tant que marqueurs de classe, vous devriez utiliser des annotations à la place. P>
Je ne regarde jamais les usages des annotations, bien que je l'utilise dans certains cadres. Merci. Je vais google pour des tutoriels. Pourriez-vous également me transmettre des liens de tutoriel d'annotation si vous vous trouvez à portée de main?
Java.sun.com/j2se/1.5.0/ DOCS / GUIDE / LANGUE / ANNOTATIONS.HTML Le plus grand gotcha à utiliser des annotations est que vous devez annoter vos annotations avec une conservation de «Runtime» si vous souhaitez les utiliser au moment de l'exécution. Par défaut, ils sont jetés par le compilateur.
Un autre gotcha avec des annotations est qu'ils ne sont pas hérités par défaut par les sous-classes. Vous devez spécifier @ hérités ( J2EE .ME / J2SE / 1.5.0 / DOCS / API / Java / Lang / Annotation / Hérité. HTML ) sur l'annotation pour atteindre cette
Les annotations ne sont pas nécessairement ce que vous voulez. Les interfaces de marquage sont un moyen de travailler une propriété d'un type dans le type lui-même. Par exemple, si vous êtes sur le point de commencer à écrire du code ressemblant à ceci:
interface ContainableTag {} public class Foo implements ContainableTag {} // ... elsewhere... public void addElement(ContainableTag ct){ // add the containable tag as an element }
Haha .. mon "Java efficace" est trop vieux pour avoir cet article. Merci.
tandis que les annotations peuvent fournir une alternative à quelles interfaces de marqueur accomplissent, elles ne sont disponibles qu'en Java et ne s'intègrent pas bien aux IDes: j'utilise également des interfaces de marqueur pour baliser des concepts associés dans mon projet, et je peux ensuite utiliser le type Navigateur de hiérarchie Pour trouver tous les membres (je suppose que cela sera finalement pris en charge par des IDs principaux pour les annotations bientôt). P>
Quant à l'article que vous avez mentionné, je ne vois pas le point de soutenir que si une classe syntaxiquement / structurellement "remplit" une interface, cette interface peut / doit être appliquée automatiquement à la classe ("toute classe peut le déclarer [ Accessoires aléatoires] comme une interface ... "). C'est la pensée en arrière, à mon avis. P>
Je dirais que les endroits où une telle interface de marqueur est utilisée dans une déclaration `InstanceOf ', utilisez une logique inversée, mais aussi longtemps que vous êtes coincé dans une langue sans héritage multiple, aspects et annotations, je ne vois pas mieux façon d'accomplir cela sans sortir de la langue de base. P>
Notez également que cet argument de battement de mort sur une interface vide toujours applicable pourrait également être appliqué aux annotations. P>
Vous devez signaler les requêtes existantes sur ce sujet à ce sujet. Ils contiennent également beaucoup de références. Article intéressant que vous avez creusé, cependant.