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

前端 未结 3 1141
醉梦人生
醉梦人生 2020-12-29 01:57

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 Serv

相关标签:
3条回答
  • 2020-12-29 02:16

    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")
    // ...
    
    0 讨论(0)
  • 2020-12-29 02:16

    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

    0 讨论(0)
  • 2020-12-29 02:29

    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.

    0 讨论(0)
提交回复
热议问题