试图找出如何与Java 8的可重复注释支持相处。
以下:https://blog.idrsolutions.com/2015/03/java-8-repeating-annotation-explained-in-5-minutes/
它运行得完美无缺。
但是,如果我正在修改这个示例,并且只在Car类上添加了一个@制造商,那么我就无法读取这个注释。因此,如果重复注释只有1次出现,则无法读取。
因此:
@Manufacturer("Range Rover")
public class Car {
}
Manufacturer[] a = Car.class.getAnnotationsByType(Manufacturer.class );
这里的大小是0
和
Cars cars = Car.class.getAnnotation(Cars.class);
for(Manufacturer car: cars.value())
System.out.println(car.value());
汽车上会有个NPE。
为什么这么说?
发布于 2016-05-27 12:11:24
因此,问题是Manufacturer
注释没有只声明容器注释(Cars
)的RetentionPolicy
。
所以增加
@Retention(RetentionPolicy.RUNTIME)
另外,在Manufacturer
上,注释将以基于容器的基于/single的方式(以一种说话方式)读取注释。
谢谢肖恩,至少你的回答给了我线索..。
发布于 2016-05-27 08:16:44
您试图得到类型汽车的注释,而不是类型制造商的注释。
以下解决办法奏效:
Manufacturer[] annotations = Car.class.getAnnotationsByType(Manufacturer.class);
for (Manufacturer annotation : annotations) {
System.out.println(annotation.name());
}
您应该始终将注释的类型传递给getAnnotation或getAnnotationsByType,而不是类本身的类型。
希望它能帮助你
https://stackoverflow.com/questions/37477593
复制相似问题