可重复注释目标子集不匹配编译器错误
Repeatable annotation target subset mismatch compiler error
我有以下注释;
@Repeatable(Infos.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.Type, ElementType.Constructor})
public @interface Info {
String[] value() default {};
}
如您所见,它是可重复的,并且使用包装器 class Infos
即;
@Retention(RetentionPolicy.RUNTIME)
public @interface Infos {
Info[] value();
}
但我在 Info
class;
上收到以下编译器错误
target of container annotation is not a subset of target of this annotation
这个错误的原因和解决方法是什么?
问题是由于容器注释 class Infos
上缺少 @Target
定义,因为 Info
有以下目标;
@Target({ElementType.Type, ElementType.Constructor})
public @interface Info { .. }
这意味着这个注释只能放在类型和构造函数上,但是容器 class 也应该定义一些目标,因为它本身就是一个注释。由于警告还提到,这组目标应该是原始注释目标的子集。例如;
@Target(ElementType.Type)
public @interface Infos { .. }
这将允许我们在类型上重复 Info
注释,但不能在构造函数上重复;
@Info(..)
@Info(..)
class SomeClass { .. }
另外需要注意的是,你不能在容器注解中添加新的目标类型,因为主注解不包含它作为目标,这将是没有意义的。从那以后;
container class can only contain a subset of main annotation target
set.
将注释 @Target(ElementType.TYPE) 添加到 Infos.
我有以下注释;
@Repeatable(Infos.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.Type, ElementType.Constructor})
public @interface Info {
String[] value() default {};
}
如您所见,它是可重复的,并且使用包装器 class Infos
即;
@Retention(RetentionPolicy.RUNTIME)
public @interface Infos {
Info[] value();
}
但我在 Info
class;
target of container annotation is not a subset of target of this annotation
这个错误的原因和解决方法是什么?
问题是由于容器注释 class Infos
上缺少 @Target
定义,因为 Info
有以下目标;
@Target({ElementType.Type, ElementType.Constructor})
public @interface Info { .. }
这意味着这个注释只能放在类型和构造函数上,但是容器 class 也应该定义一些目标,因为它本身就是一个注释。由于警告还提到,这组目标应该是原始注释目标的子集。例如;
@Target(ElementType.Type)
public @interface Infos { .. }
这将允许我们在类型上重复 Info
注释,但不能在构造函数上重复;
@Info(..)
@Info(..)
class SomeClass { .. }
另外需要注意的是,你不能在容器注解中添加新的目标类型,因为主注解不包含它作为目标,这将是没有意义的。从那以后;
container class can only contain a subset of main annotation target set.
将注释 @Target(ElementType.TYPE) 添加到 Infos.