引言
在我之前的文章“在自定义注解中使用哈希映射”中,我解释了如何使用枚举常量在注解中使用HashMap。
嵌套注解也可以用于映射键值对。
注解中支持的类型列表
注解
需要两个自定义注解。第一个注解(例如MapItem)包含一个键值对,第二个注解(例如MapItems)包含一个MapItem注解列表。
自定义注解 @MapItem
注解@MapItem表示单个键值对。
@Target(ElementType.FIELD) public @interface MapItem { String key(); String value(); }
自定义注解 @MapItems
注解@MapItems定义了一个MapItem列表。
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface MapItems { MapItem[] items(); }
功能测试
@MapItem注解列表设置在@MapItems注解中。
class ExampleDto { @MapItems(items = { @MapItem(key = "1", value = "MALE"), @MapItem(key = "2", value = "FEMALE"), @MapItem(key = "6", value = "DIVERS") }) public String salutation; }
MapItemsTest测试MapItems注解。测试在salutation字段上进行。
为了演示如何使用@MapItem列表,我从@MapItem创建一个HashMap,并将其与预期的HashMap进行比较。
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 ); } }
结论
优点
这是一个巧妙的解决方案,易于实现。
缺点
例如,如果键值对要在验证器中使用,则必须间接获取它们。
完整示例
https://www.php.cn/link/164710e8521a5b39302f816392f05bc2
相关文章
- 在自定义注解中使用HashMap
- 为映射值创建自定义Jackson JsonSerializer和JsonDeserializer
以上是在自定义注释中对键值对使用嵌套注释的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver Mac版
视觉化网页开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。