我如何编写一个包含另一个注释和值的自定义注释?
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation{
Class<? extends TestAnnotationChild> annotation();
}
第二个注释
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotationChild{
}
我想做类似的事情
@TestAnnotation(@TestAnnotationChild={values})
我该怎么做?
答案 0 :(得分:4)
这是完成的方式。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
TestAnnotationChild child();
// Or for an array
TestAnnotationChild[] children();
}
用法
@TestAnnotation(
@TestAnnotationChild(
value = "42",
anotherValue = 42
)
)
但是您的声明的这一部分
和值
确实让我认为您想做非常规的事情。
你能澄清一下吗?
答案 1 :(得分:2)
您应该只使用TestAnnotationChild value();
而不是Class<? extends TestAnnotationChild> annotation();
。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation{
TestAnnotationChild value();
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotationChild {
// String or whatever Object you want
String[] value();
}
现在,您可以根据需要使用注释:
@TestAnnotation(@TestAnnotationChild({"TEST"}))
答案 2 :(得分:0)
您可以在TestAnnotationChild
中拥有TestAnnotation
类型的属性,就像它是字符串一样,或其他任何东西