Maison > Java > javaDidacticiel > Utilisation d'annotations imbriquées pour les paires clé-valeur dans une annotation personnalisée

Utilisation d'annotations imbriquées pour les paires clé-valeur dans une annotation personnalisée

Susan Sarandon
Libérer: 2025-01-20 04:04:10
original
359 Les gens l'ont consulté

Using nested annotations for key-value pairs in a custom annotation

Présentation

Dans mon article précédent "Utilisation de HashMap dans les annotations personnalisées", j'ai expliqué comment utiliser HashMap dans les annotations à l'aide de constantes d'énumération.

Les annotations imbriquées peuvent également être utilisées pour mapper des paires clé-valeur.

Liste des types pris en charge dans les annotations

Annotations

Nécessite deux annotations personnalisées. La première annotation (telle que MapItem) contient une paire clé-valeur et la deuxième annotation (telle que MapItems) contient une liste d'annotations MapItem.

Annotation personnalisée @MapItem

L'annotation @MapItem représente une seule paire clé-valeur.

<code class="language-java">@Target(ElementType.FIELD)
public @interface MapItem {

    String key();
    String value();
}</code>
Copier après la connexion

Annotation personnalisée @MapItems

L'annotation @MapItems définit une liste MapItem.

<code class="language-java">@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MapItems {

    MapItem[] items();
}</code>
Copier après la connexion

Tests fonctionnels

La liste d'annotations @MapItem est définie dans l'annotation @MapItems.

<code class="language-java">class ExampleDto {

    @MapItems(items = {
        @MapItem(key = "1", value = "MALE"),
        @MapItem(key = "2", value = "FEMALE"),
        @MapItem(key = "6", value = "DIVERS")
    })
    public String salutation;
}</code>
Copier après la connexion

MapItemsTest teste les annotations MapItems. Le test est effectué sur le champ de salutation.

Pour montrer comment utiliser une liste @MapItem, je crée un HashMap à partir du @MapItem et je le compare au HashMap attendu.

<code class="language-java">class MapItemsTest {

    @Test
    void testMapItems() throws NoSuchFieldException {

        Field field = ExampleDto.class.getDeclaredField("salutation");
        field.setAccessible(true);

        MapItems annotation = field.getAnnotation(MapItems.class);

        Map<String, String> mappingItems = Arrays
                .stream(annotation.items())
                .collect(
                    Collectors.toMap(
                        MapItem::key,
                        MapItem::value
                    )
                );

        assertEquals(
            new HashMap<>() {{
                put("1", "MALE");
                put("2", "FEMALE");
                put("6", "DIVERS");
            }},
            mappingItems
        );
    }
}</code>
Copier après la connexion

Conclusion

Avantages

C'est une solution intéressante et facile à mettre en œuvre.

Inconvénients

Par exemple, si des paires clé-valeur doivent être utilisées dans un validateur, elles doivent être obtenues indirectement.

Exemple complet

https://www.php.cn/link/164710e8521a5b39302f816392f05bc2

Articles connexes

  • Utiliser HashMap dans les annotations personnalisées
  • Créez Jackson JsonSerializer et JsonDeserializer personnalisés pour les valeurs mappées

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:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal