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
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.
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>
L'annotation @MapItems définit une liste MapItem.
<code class="language-java">@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface MapItems { MapItem[] items(); }</code>
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>
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>
C'est une solution intéressante et facile à mettre en œuvre.
Par exemple, si des paires clé-valeur doivent être utilisées dans un validateur, elles doivent être obtenues indirectement.
https://www.php.cn/link/164710e8521a5b39302f816392f05bc2
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!