我有以下注释;
@Repeatable(Infos.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.Type, ElementType.Constructor})
public @interface Info {
String[] value() default {};
}
如您所见,它是可重复的,并使用包装类Infos
,这是;
@Retention(RetentionPolicy.RUNTIME)
public @interface Infos {
Info[] value();
}
但我在Info
class;
容器注释的目标不是此注释的目标的子集
此错误的原因和解决方案是什么?
答案 0 :(得分:2)
问题是由于@Target
具有以下目标,因此缺少Infos
容器注记类Info
的定义;
@Target({ElementType.Type, ElementType.Constructor})
public @interface Info { .. }
这意味着这个注释只能放在类型和构造函数上,但容器类也应该定义一些目标,因为它是一个注释本身。由于警告也提到,这组目标应该是原始注释目标的子集。例如;
@Target(ElementType.Type)
public @interface Infos { .. }
这将允许我们在类型上重复Info
注释,但不在构造函数上重复;
@Info(..)
@Info(..)
class SomeClass { .. }
另外需要注意的是,你不能在容器注释中添加新的目标类型,因为主注释不包含它作为目标,这将毫无意义。从那以后;
容器类只能包含主要注释目标的子集 集。
答案 1 :(得分:0)
将注释 @Target(ElementType.TYPE)添加到 Infos 。