Java自定义注释需要另一个注释

时间:2019-03-04 19:06:46

标签: java

我如何编写一个包含另一个注释和值的自定义注释?

@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})

我该怎么做?

3 个答案:

答案 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类型的属性,就像它是字符串一样,或其他任何东西