在字段上定义可重复使用的注解:
@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反射获取注解