Java8可重复注释

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 及 车上会有

试图弄清楚如何使用Java8可重复注释支持

以下:

它工作完美无瑕

但是,如果我修改了这个示例,在Car类中只添加了一个@Manufacturer,我就无法阅读这个注释。所以,若重复注释只出现1次,则无法读取

因此:

@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)