如何定义自定义注释以使用目标元素的子集?

时间:2014-08-11 20:44:09

标签: java annotations

问题:

是否可以定位多种元素类型? (不止一个,少于全部)

详细信息:

我尝试创建一个仅在方法和字段上可接受的注释。

我知道如果我没有指定@Target注释,我可以在所有元素上使用我的自定义注释。但是,我希望在与我的逻辑冲突的元素类型上编译时安全。

C#/。NET

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Method)]
public class MyAttribute : Attribute
{
    ...

Java尝试

多个目标注释:

@Target(ElementType.METHOD)
@Target(ElementType.FIELD)
public @interface MyAnnotation
{

编译器错误:

  

MyAnnotation.java:8:错误:重复注释

OR' d值:

@Target(ElementType.METHOD | ElementType.FIELD)
public @interface MyAnnotation
{

编译器错误:

  

MyAnnotation.java:7:错误:二元运算符的错误操作数类型' |'

注释数组

@Targets({@Target(ElementType.METHOD),@Target(ElementType.FIELD)})
public @interface MyAnnotation
{

编译器错误:

  

MyAnnotation.java:7:错误:找不到符号   @Targets({@目标(ElementType.METHOD),@目标(ElementType.FIELD)})
    ^符号:类目标

1 个答案:

答案 0 :(得分:3)

Java - 输入是ElementTypes的数组。要在注释中定义数组值,我们用逗号分隔大括号内的值:

@Target({ElementType.METHOD, ElementType.FIELD})
public @interface MyAnnotation {
}