首頁 >Java >java教程 >在自訂註釋中對鍵值對使用嵌套註釋

在自訂註釋中對鍵值對使用嵌套註釋

Susan Sarandon
Susan Sarandon原創
2025-01-20 04:04:10356瀏覽

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

引言

在我之前的文章「在自訂註解中使用雜湊映射」中,我解釋瞭如何使用枚舉常數在註解中使用HashMap。

巢狀註解也可以用來映射鍵值對。

註解中支援的類型清單

需要兩個自訂註解。第一個註解(例如MapItem)包含一個鍵值對,第二個註解(例如MapItems)包含一個MapItem註解清單。

自訂註解 @MapItem

註解@MapItem表示單一鍵值對。

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

    String key();
    String value();
}</code>

自訂註解 @MapItems

註解@MapItems定義了一個MapItem清單。

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

    MapItem[] items();
}</code>

功能測試

@MapItem註解清單設定在@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測試MapItems註解。測試在salutation字段上進行。

為了示範如何使用@MapItem列表,我從@MapItem建立一個HashMap,與預期的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>

結論

優點

這是一個巧妙的解決方案,很容易實現。

缺點

例如,如果鍵值對要在驗證器中使用,則必須間接取得它們。

完整範例

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

相關文章

  • 在自訂註解中使用HashMap
  • 為映射值建立自訂Jackson JsonSerializer和JsonDeserializer

以上是在自訂註釋中對鍵值對使用嵌套註釋的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn