ホームページ >Java >&#&チュートリアル >カスタム アノテーションのキーと値のペアにネストされたアノテーションを使用する
前回の記事「カスタム アノテーションでの HashMap の使用」では、列挙定数を使用してアノテーションで HashMap を使用する方法を説明しました。
ネストされたアノテーションを使用して、キーと値のペアをマッピングすることもできます。
アノテーションでサポートされている型のリスト
2 つのカスタム注釈が必要です。最初の注釈 (MapItem など) にはキーと値のペアが含まれ、2 番目の注釈 (MapItems など) には MapItem 注釈のリストが含まれます。
注釈 @MapItem は、単一のキーと値のペアを表します。
<code class="language-java">@Target(ElementType.FIELD) public @interface MapItem { String key(); String value(); }</code>
注釈 @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
以上がカスタム アノテーションのキーと値のペアにネストされたアノテーションを使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。