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
1003 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!

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