Maison > Java > javaDidacticiel > Élément Utiliser les interfaces de marqueur pour définir les types

Élément Utiliser les interfaces de marqueur pour définir les types

PHPz
Libérer: 2024-07-17 09:02:20
original
943 Les gens l'ont consulté

Définition et objectif

Interface des marqueurs :

  • Ne contient pas de déclarations de méthode.
  • Marque une classe comme ayant une propriété spécifique.
  • Exemple : Sérialisable indique qu'une classe peut être sérialisée.
  • Avantages des interfaces de marqueurs

Définition du type :

  • Les interfaces de marqueur définissent un type que les instances d'une classe implémentent.
  • Permet la détection des erreurs au moment de la compilation.

Exemple :

public class MyClass implements Serializable {
    // Implementação
}
Copier après la connexion

Vérification du temps de compilation :

  • L'utilisation d'interfaces de marqueurs permet de détecter les erreurs lors de la compilation.

Exemple avec Serialisable :

ObjectOutputStream.writeObject(myObject); // Garante que myObject seja Serializable
Copier après la connexion

Précision du marquage :

  • Les interfaces de marqueurs peuvent être appliquées avec précision à des sous-types spécifiques.

Exemple :

public interface MyMarkerInterface extends MySpecificInterface {
    // Sem métodos adicionais
}
Copier après la connexion

Exemples d'utilisation

Sérialisable :

  • Indique qu'une classe peut être sérialisée.

Exemple :

public class Person implements Serializable {
    private String name;
    private int age;
    // Getters, setters, etc.
}

Copier après la connexion

Définir l'interface comme marqueur restreint :

  • S'applique uniquement aux sous-types de Collection, mais n'ajoute pas de méthodes autres que celles définies par Collection.
  • Affine les contrats de méthode tels que add, equals et hashCode.
  • Comparaison avec Bullet Notes

Notes sur les marqueurs :

  • Peut être appliqué à plus d'éléments du programme (classes, interfaces, méthodes, etc.).

Exemple :

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyMarkerAnnotation {
}

@MyMarkerAnnotation
public class MyClass {
    // Implementação
}

Copier après la connexion

Quand utiliser Marker Interface vs. Annotation du marqueur :

  • Utilisez l'interface du marqueur si :
  • Le balisage doit définir un type.
  • Vous souhaiterez peut-être écrire des méthodes qui n'acceptent que les objets avec ce balisage.

Utiliser l'annotation du marqueur si :

  • La balise s'applique aux éléments autres que les classes ou les interfaces.
  • Il fait partie d'un framework qui utilise beaucoup d'annotations.

Avantages des Bullet Notes

  • Cohérence dans les cadres :
  • Facilite la cohérence dans les frameworks basés sur des annotations.

Exemple :

@MyFrameworkAnnotation
public class MyClass {
    // Implementação
}
Copier après la connexion

Décision d'utilisation
Pour définir un type :

  • Utilisez une interface de marqueur.
  • Pour marquer des éléments qui ne sont pas des classes ou des interfaces :
  • Utilisez une puce.

Partie d'un framework basé sur des annotations :
Utilisez une puce.

Exemple final

  • Interface des marqueurs :
public interface MyTypeMarker {
}

public class MyClass implements MyTypeMarker {
    // Implementação
}

public void process(MyTypeMarker obj) {
    // Processa apenas objetos marcados com MyTypeMarker
}

Copier après la connexion

Remarque sur le signet :

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotationMarker {
}

@MyAnnotationMarker
public class MyClass {
    // Implementação
}

Copier après la connexion

Résumé

  • Les interfaces de marqueurs sont utilisées pour définir des types sans méthodes supplémentaires.
  • Les annotations de marqueurs sont utilisées pour marquer largement les éléments du programme.
  • Le choix dépend du contexte et de l'objectif du marquage.

Complément
Interfaces des marqueurs :
Image description

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal