Heim >Java >javaLernprogramm >Verwendung verschachtelter Annotationen für Schlüssel-Wert-Paare in einer benutzerdefinierten Annotation
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!