bur*_*ete 2 java annotations java-annotations
我有以下注释:
@Repeatable(Infos.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.Type, ElementType.Constructor})
public @interface Info {
String[] value() default {};
}
Run Code Online (Sandbox Code Playgroud)
如您所见,它是可重复的,并且使用的是包装器类Infos;
@Retention(RetentionPolicy.RUNTIME)
public @interface Infos {
Info[] value();
}
Run Code Online (Sandbox Code Playgroud)
但是我在Info类上遇到以下编译器错误;
容器注释的目标不是此注释的目标的子集
此错误的原因和解决方法是什么?
问题是由于缺少@Target容器注释类的定义Infos,因为它Info具有以下目标;
@Target({ElementType.Type, ElementType.Constructor})
public @interface Info { .. }
Run Code Online (Sandbox Code Playgroud)
这意味着该注释只能放在类型和构造函数上,但是容器类也应该定义一些目标,因为它本身就是注释。由于警告也提到了这一点,因此这组目标应该是原始注释目标的子集。例如;
@Target(ElementType.Type)
public @interface Infos { .. }
Run Code Online (Sandbox Code Playgroud)
这将使我们可以Info 在类型上重复注释,但不能在构造函数上重复注释;
@Info(..)
@Info(..)
class SomeClass { .. }
Run Code Online (Sandbox Code Playgroud)
还应注意,您不能向容器注释中添加新的目标类型,因为主注释不包含它作为目标,所以这将毫无意义。从此以后;
容器类只能包含主要注释目标集的子集。
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |