ホームページ >Java >&#&チュートリアル >カスタム アノテーションのキーと値のペアにネストされたアノテーションを使用する

カスタム アノテーションのキーと値のペアにネストされたアノテーションを使用する

Susan Sarandon
Susan Sarandonオリジナル
2025-01-20 04:04:10356ブラウズ

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

はじめに

前回の記事「カスタム アノテーションでの HashMap の使用」では、列挙定数を使用してアノテーションで HashMap を使用する方法を説明しました。

ネストされたアノテーションを使用して、キーと値のペアをマッピングすることもできます。

アノテーションでサポートされている型のリスト

注釈

2 つのカスタム注釈が必要です。最初の注釈 (MapItem など) にはキーと値のペアが含まれ、2 番目の注釈 (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 アノテーションをテストします。テストは挨拶フィールドで実行されます。

@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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。