java8如何重复注解
重复注解的使用方法
Java 8 引入了重复注解的功能,允许在同一个元素上多次使用相同的注解。以下是实现重复注解的具体方法:
定义容器注解
创建一个容器注解来存储重复的注解。容器注解必须包含一个返回注解数组的 value 方法。
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Repeatable(Colors.class)
@Retention(RetentionPolicy.RUNTIME)
public @interface Color {
String name();
}
@Retention(RetentionPolicy.RUNTIME)
public @interface Colors {
Color[] value();
}
使用重复注解
在需要重复注解的地方,直接多次使用同一个注解即可。
@Color(name = "red")
@Color(name = "blue")
public class MyClass {
// 类定义
}
获取重复注解
通过反射获取重复注解时,可以使用容器注解或直接获取重复注解。

Color[] colors = MyClass.class.getAnnotationsByType(Color.class);
for (Color color : colors) {
System.out.println(color.name());
}
注意事项
- 容器注解的保留期必须大于或等于重复注解的保留期。
- 重复注解和容器注解必须具有相同的目标(如类、方法等)。
- 如果重复注解未定义容器注解,编译器会报错。
示例完整代码
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Repeatable(Colors.class)
@Retention(RetentionPolicy.RUNTIME)
public @interface Color {
String name();
}
@Retention(RetentionPolicy.RUNTIME)
public @interface Colors {
Color[] value();
}
@Color(name = "red")
@Color(name = "blue")
public class MyClass {
public static void main(String[] args) {
Color[] colors = MyClass.class.getAnnotationsByType(Color.class);
for (Color color : colors) {
System.out.println(color.name());
}
}
}






