我如何创建没有括号内属性名称的自定义Java注释?
我不想像这样: @annotation_name(att=valor)
。我只想像在Servlets中一样:
@WebServlet("/main")
我如何创建没有括号内属性名称的自定义Java注释?
我不想像这样: @annotation_name(att=valor)
。我只想像在Servlets中一样:
@WebServlet("/main")
使用名为value
的属性定义注解,然后可以省略属性名:
@interface CustomAnnotation
{
String value();
}
可以这样使用:
@CustomAnnotation("/main")
// ...
特殊属性名value
在Java语言规范的"第9.6.1节. 注解接口元素"中进行了描述:
按照约定,单元素注解接口中唯一元素的名称为
value
。单元素注解(§9.7.3)提供对该约定的语言支持。
public @interface MyAnnotation {
String value();
}
如果它们有默认值,这不必是唯一的属性:
public @interface MyAnnotation {
String value();
int myInteger() default 0;
}
但是如果你想为属性分配一个除value以外的值,那么你必须显式地为value属性分配一个值。也就是说:
@MyAnnotation("foo")
@MyAnnotation(value = "foo", myInteger = 1)
可以运行
但是有问题
@MyAnnotatino("foo", myInteger = 1)
不会
引用注释官方文档:
如果只有一个名为
value
的元素,则可以省略名称,如下所示:
@SuppressWarnings("unchecked")
void myMethod() { }
这是该注解的定义方式:
public @interface SuppressWarnings {
String[] value();
}
正如您所看到的,文档并不完全正确,还允许其他属性("just one element"),请参见WebServlet
- 但名为value
的属性会被特殊处理。