Heim > Java > javaLernprogramm > Verwendung verschachtelter Annotationen für Schlüssel-Wert-Paare in einer benutzerdefinierten Annotation

Verwendung verschachtelter Annotationen für Schlüssel-Wert-Paare in einer benutzerdefinierten Annotation

Susan Sarandon
Freigeben: 2025-01-20 04:04:10
Original
359 Leute haben es durchsucht

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

Einführung

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

Anmerkungen

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.

Benutzerdefinierte Anmerkung @MapItem

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>
Nach dem Login kopieren

Benutzerdefinierte Anmerkung @MapItems

Die Annotation @MapItems definiert eine MapItem-Liste.

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

    MapItem[] items();
}</code>
Nach dem Login kopieren

Funktionstest

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Fazit

Vorteile

Dies ist eine nette Lösung und einfach zu implementieren.

Nachteile

Wenn beispielsweise Schlüssel-Wert-Paare in einem Validator verwendet werden sollen, müssen diese indirekt ermittelt werden.

Vollständiges Beispiel

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

Ähnliche Artikel

  • Verwenden Sie HashMap in benutzerdefinierten Anmerkungen
  • Erstellen Sie benutzerdefinierte Jackson JsonSerializer und JsonDeserializer für zugeordnete Werte

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage