In meinem vorherigen Artikel „Verwenden von HashMap in benutzerdefinierten Annotationen“ habe ich erklärt, wie man HashMap in Annotationen mithilfe von Aufzählungskonstanten verwendet.
Verschachtelte Annotationen können auch zur Zuordnung von Schlüssel-Wert-Paaren verwendet werden.
Liste der in Anmerkungen unterstützten Typen
Erfordert zwei benutzerdefinierte Anmerkungen. Die erste Annotation (z. B. MapItem) enthält ein Schlüssel-Wert-Paar und die zweite Annotation (z. B. MapItems) enthält eine Liste von MapItem-Annotationen.
Die Annotation @MapItem stellt ein einzelnes Schlüssel-Wert-Paar dar.
<code class="language-java">@Target(ElementType.FIELD) public @interface MapItem { String key(); String value(); }</code>
Die Annotation @MapItems definiert eine MapItem-Liste.
<code class="language-java">@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface MapItems { MapItem[] items(); }</code>
Die @MapItem-Annotationsliste wird in der @MapItems-Annotation festgelegt.
<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 testet MapItems-Anmerkungen. Der Test wird auf dem Anredefeld durchgeführt.
Um zu demonstrieren, wie eine @MapItem-Liste verwendet wird, erstelle ich eine HashMap aus dem @MapItem und vergleiche sie mit der erwarteten HashMap.
<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>
Dies ist eine nette Lösung und einfach zu implementieren.
Wenn beispielsweise Schlüssel-Wert-Paare in einem Validator verwendet werden sollen, müssen diese indirekt ermittelt werden.
https://www.php.cn/link/164710e8521a5b39302f816392f05bc2
Das obige ist der detaillierte Inhalt vonVerwendung verschachtelter Annotationen für Schlüssel-Wert-Paare in einer benutzerdefinierten Annotation. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!