如何在注释中使用注释?

时间:2016-09-22 12:18:33

标签: java annotations nested

鉴于:

public @interface MyAnnotation(){
    public SomeType[] value();
}
在Java 7中,

可以执行以下操作:

@MyAnnotation({
    value1,
    @MyAnnotation({subValue1, subvalue2, ...}) value2,
    ...
    valueN
})
public Object someProperty;

2 个答案:

答案 0 :(得分:-1)

你可以。这是Jackson库中的一个示例(省略了注释):

package com.fasterxml.jackson.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE, ElementType.FIELD,
    ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonSubTypes {
    public Type[] value();

    public @interface Type {
        /**
         * Class of the subtype
         */
        public Class<?> value();

        /**
         * Logical type name used as the type identifier for the class
         */
        public String name() default "";
    }
}

以下是一个示例用法:

@JsonSubTypes({
        @JsonSubTypes.Type(value = TestSystemEvent.class, name = "TestEvent"),
})
public interface SystemEvent {
}

答案 1 :(得分:-1)

  

如何在注释中使用注释?

也许喜欢这个

public @interface MyAnnotation(){
    public SomeType[] value();

    public MyAnnotation[] refine();
}

@MyAnnotation(
  {value1, value2},
  refine={ @MyAnnotation({valueX, valueY}), @MyAnnotation(valueM) }
)
public Object someProperty;

此外,在Java 8中,您可以使用Repeatable注释 - 因此您可以优化或添加到您的主要内容中。 (例如第一次)通过后续重复相同注释引入的其他改进。