【坑备注】自定义@Repeatable注解

2023-12-15 14:57:47

在字段上定义可重复使用的注解:

@Target(value = {ElementType.FIELD})
@Retention(value = RetentionPolicy.RUNTIME)
@Repeatable(value = Indexes.class)
public @interface TableIndex {
    IndexTypeEnum type();
    String name();
    int order();
}

这里指定了@Repeatable注解,支持多次使用相同的注解

@TableIndex()
@TableIndex()
private String field;

想要这样的使用方式生效,需要采用一个包裹性的注解

@Target(value = {ElementType.FIELD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Indexes {
    TableIndex[] value();
}

问题来了:

1. 当field字段上只用一个@TabIndex注解,那么下面的代码始终是null

field.getAnnotation(Indexes.class)

想要获取TabIndex注解,是可以的

field.getAnnotation(TabIndex.class)

2. 当field字段上用多个@TabIndex注解,那么下面的代码始终是null

field.getAnnotation(TabIndex.class)

想要获取TabIndex注解,是可以的

field.getAnnotation(Indexes.class).value()

结论:

使用Repeatable注解的时候,如@Group包裹@Single注解,需要分情况判断,

1. 如果使用了一次,那么需要使用@Single反射获取注解

2. 如果使用了多次,需要使用@Group反射获取注解

文章来源:https://blog.csdn.net/Day_and_Night_2017/article/details/135015563
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。