Le contenu de cet article porte sur ce qu'est l'interface de marqueur Java ? L'introduction de l'interface de balise Java a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer, j'espère qu'elle vous sera utile.
Voyons d'abord ce qu'est une interface de marqueur ? L'interface Tag est parfois appelée interface Tag, c'est-à-dire que l'interface ne contient aucune méthode. Il est facile de trouver des exemples d'interfaces marquées en Java. Par exemple, l'interface sérialisable dans le JDK est une interface marquée.
Tout d'abord, précisons que l'interface Marker n'est en aucun cas unique au langage de programmation Java, mais universelle en informatique. concept de conception.
Regardons la définition de l'interface des marqueurs dans Wikipédia.
« Le modèle d'interface balise/marqueur est un modèle de conception en informatique, utilisé avec des langages qui fournissent des informations de type d'exécution sur les objets. Il fournit un moyen d'associer des métadonnées à une classe là où le langage le fait. Je n'ai pas de support explicite pour de telles métadonnées."
J'ai essayé Google Translate pour traduire le paragraphe ci-dessus, mais la traduction était très mauvaise, je vais donc l'expliquer.
L'interface balisée est une idée de conception en informatique. Le langage de programmation lui-même ne prend pas en charge la gestion des métadonnées des classes. L'interface du marqueur compense ce manque de fonctionnalité - une classe implémente une interface du marqueur sans aucune méthode. En fait, l'interface du marqueur devient en un sens l'une des métadonnées de cette classe. Au moment de l'exécution, grâce au mécanisme de réflexion du langage de programmation, nous pouvons obtenir ces métadonnées dans le code.
Prenons l'interface Serialisable comme exemple. Une classe implémente cette interface, indiquant qu'elle peut être sérialisée. Par conséquent, nous utilisons en fait l'interface Serialisable pour marquer la classe avec des métadonnées « sérialisables » et l'étiqueter comme « sérialisable ». C'est de là que vient le nom de l'interface tag/label.
Le code suivant est extrait du code source du JDK :
if (obj instanceof String) { writeString((String) obj, unshared); } else if (cl.isArray()) { writeArray(obj, desc, unshared); } else if (obj instanceof Enum) { writeEnum((Enum) obj, desc, unshared); } else if (obj instanceof Serializable) { writeOrdinaryObject(obj, desc, unshared); } else { if (extendedDebugInfo) { throw new NotSerializableException(cl.getName() + " " + debugInfoStack.toString()); } else { throw new NotSerializableException(cl.getName()); } }
La sérialisation en Java, les chaînes, les tableaux, les classes d'énumération et les classes ordinaires sont effectuées séparément . Si la variable actuellement à sérialiser n'est ni une chaîne ni un tableau ou une classe d'énumération, alors il est vérifié si la classe implémente l'interface Serialisable. Veuillez noter que la ligne 1177 de la figure ci-dessous effectue cette détection. Si l'interface Serialisable n'est pas implémentée, une exception NotSerializingException sera levée.
Vous vous demandez peut-être : les annotations qui volent partout au printemps ne sont-elles pas le meilleur moyen de conserver les métadonnées ? En effet, Annotation peut être déclarée devant des packages Java, des classes, des champs, des méthodes, des variables locales, des paramètres de méthode, etc. dans le but de conserver les métadonnées, ce qui est à la fois flexible et pratique. Cependant, une si bonne chose ne peut être utilisée qu'après JDK1.5. Avant JDK1.5, la tâche importante de maintenance des métadonnées incombait à l'interface de marque.
Jetons un coup d'œil à une autre interface de marqueur, Cloneable. La ligne 51 de la figure ci-dessous indique clairement que cette interface est disponible depuis le JDK1.0.
Les commentaires de la méthode Clone dans le code source du JDK sont également clairement indiqués. Si une classe n'implémente pas l'interface Cloneable, elle le sera. exécuté lorsque la méthode clone est exécutée. Lève CloneNotSupportedException.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!