Java8可重复注释
试图弄清楚如何使用Java8可重复注释支持 以下: 它工作完美无瑕 但是,如果我修改了这个示例,在Car类中只添加了一个@Manufacturer,我就无法阅读这个注释。所以,若重复注释只出现1次,则无法读取 因此:Java8可重复注释,java,annotations,java-8,Java,Annotations,Java 8,试图弄清楚如何使用Java8可重复注释支持 以下: 它工作完美无瑕 但是,如果我修改了这个示例,在Car类中只添加了一个@Manufacturer,我就无法阅读这个注释。所以,若重复注释只出现1次,则无法读取 因此: @Manufacturer("Range Rover") public class Car { } Manufacturer[] a = Car.class.getAnnotationsByType(Manufacturer.class ); 这里的尺寸是0 及 车上会有
@Manufacturer("Range Rover")
public class Car {
}
Manufacturer[] a = Car.class.getAnnotationsByType(Manufacturer.class );
这里的尺寸是0
及
车上会有一个NPE
这是为什么?您试图获得汽车类型的注释,而不是制造商类型的注释 以下解决方案奏效了:
Manufacturer[] annotations = Car.class.getAnnotationsByType(Manufacturer.class);
for (Manufacturer annotation : annotations) {
System.out.println(annotation.name());
}
您应该始终将注释的类型传递给getAnnotation或getAnnotationsByType,而不是类本身的类型
希望它能帮助您所以问题是
制造商
批注没有保留策略
仅声明容器批注(汽车
)
所以加上
@Retention(RetentionPolicy.RUNTIME)
同样在上,制造商注释将以基于容器/基于单个容器的方式(从某种意义上说)阅读注释
谢谢Sean,至少你的回答给了我一个线索…要通过反射访问注释,它必须标记为@Retention(RUNTIME)
。你的Cars注释有这个吗?是的,当然,这听起来不是问题,如果我用多个注释来注释类,它是有效的,但是如果只有一个注释,我就无法得到它..Manufacturer[]a=Car.class.getAnnotationsByType(Manufacturer.class);这就是我正在做的(在示例链接中指定)。问题是,如果Car类有2@Manufacturer注释,我就能够阅读它们,如果只有一个注释,我就不能阅读。我是否遗漏了什么?请参阅原始问题中的教程。你可以用两种方式阅读它们,在最初的帖子中我刚刚解释了它们的输出。如果这有点混乱,很抱歉……你把类型名弄混了<代码>汽车
不是注释。显然,将包含多个Manufacturer
注释的容器注释命名为“Cars
”不是一个好主意……没关系。你可以编辑你的答案。除此之外,也许你应该在博客上就这个问题发表评论。
@Retention(RetentionPolicy.RUNTIME)