49

如何在括号内没有属性名称的情况下进行自定义 Java 注释?

我不想要这个:@annotation_name(att=valor)。我只想像在Servlets中一样,即:

@WebServlet("/main")
4

3 回答 3

57

使用名为 的属性定义注释value,然后可以省略属性名称:

@interface CustomAnnotation
{
    String value();
}

这可以像这样使用:

@CustomAnnotation("/main")
// ...
于 2012-08-02T21:53:34.147 回答
33

您指定一个名为 value 的属性:

public @interface MyAnnotation {

    String value();

}

如果它们具有默认值,则不必是唯一的属性:

public @interface MyAnnotation {

    String value();
    int myInteger() default 0;

}

但是如果你想显式地为属性赋值而不是值,那么你必须显式地赋值。也就是说:

@MyAnnotation("foo")
@MyAnnotation(value = "foo", myInteger = 1)

作品

@MyAnnotatino("foo", myInteger = 1)

才不是

于 2012-08-02T22:02:40.300 回答
18

引用注释官方文档

如果只有一个元素名为value,则名称可以省略,如下所示:

@SuppressWarnings("unchecked")
void myMethod() { }

这是这个注解的定义方式:

public @interface SuppressWarnings {
  String[] value();
}

如您所见,文档并不完全正确,还允许其他属性(“仅一个元素”),请参阅WebServlet- 但命名value的属性会有所不同。

于 2012-08-02T21:55:45.313 回答