几年后带来我们的Java 8.它提供了重复同一类的注释的方法。
在Java 8中,您可以声明一个注释以隐式包装在容器注释中。您声明为@Repeated(value=a_class)
您想要重复的注释。当您添加可重复注释的多个实例时,编译器将自动将它们包装在指定为@Repeated
的参数的容器注释a_class
中。
如果声明:
@Retention(RetentionPolicy.RUNTIME)
public @interface Columns {
Column[] value() default {};
}
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(value = Columns.class)
public @interface Column {
String dbName();
String tableName();
}
,那么你可以多次使用注释有或没有其他标注包装他们,都是等价的:
@Column(dbName="db1", tableName="table1")
@Column(dbName="db2", tableName="table2")
public static final String USER_ID = "userid";
@Columns({
@Column(dbName="db3", tableName="table3"),
@Column(dbName="db4", tableName="table4")
})
public static final String LAST_NAME = "last name";
的注解是在使用getAnnotationsByType(class)
检索这两种情况。
public static void main(String[] args) {
for(Field field : AnnotationsTest.class.getDeclaredFields()){
System.out.println("Field: " + field.getName());
Column[] columns = field.getAnnotationsByType(Column.class);
for(Column column : columns){
System.out.println(" db: " + column.dbName() + " table: " + column.tableName());
}
System.out.println();
}
}
它应该输出:
Field: USER_ID
db: db1 table: table1
db: db2 table: table2
Field: LAST_NAME
db: db3 table: table3
db: db4 table: table4
很好的问题.. –