How can I do Java annotation like @name(“Luke”) with no attribute inside parenthesis?

空扰寡人 提交于 2019-11-29 10:36:44

问题


How I can do custom Java annotation with no attribute name inside parentheses?

I don't want this: @annotation_name(att=valor). I just want like in Servlets, i.e:

@WebServlet("/main")

回答1:


Define the annotation with an attribute named value, then the attribute name can be omitted:

@interface CustomAnnotation
{
    String value();
}

This can be used like so:

@CustomAnnotation("/main")
// ...



回答2:


You specify an attribute named value:

public @interface MyAnnotation {

    String value();

}

This doesn't have to be the only attribute if they have default values:

public @interface MyAnnotation {

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

}

But if you want to explicitly assign a value to the attribute other than value, you then must explicitly assign value. That is to say:

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

works

but

@MyAnnotatino("foo", myInteger = 1)

does not




回答3:


Quoting Annotations official documentation:

If there is just one element named value, then the name may be omitted, as in:

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

This is how this annotation is defined:

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

As you can see the documentation isn't entirely right, other attributes are also allowed ("just one element"), see WebServlet - but the one named value is treated differently.



来源:https://stackoverflow.com/questions/11786354/how-can-i-do-java-annotation-like-nameluke-with-no-attribute-inside-parenth

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!