I was browsing through the documentation of JDK 7 when I noticed an annotation called @Target
in package java.lang.annotation
. The header of that class is
@Documented
@Retention(value=RUNTIME)
@Target(value=ANNOTATION_TYPE)
public @interface Target
Now, @Target
is used as an annotation to itself. How is this possible? @Target
is used in the header even before it is declared. I tried this with annotations I had written, and it worked as well. Can anyone explain what's happening here?
Annotations are used to provide supplemental information about a program. Annotations start with '@'. Annotations do not change the action of a compiled program. Annotations help to associate metadata (information) to the program elements i.e. instance variables, constructors, methods, classes, etc.
Annotation can be: A systematic summary of the text that you create within the document. A key tool for close reading that helps you uncover patterns, notice important words, and identify main points. An active learning strategy that improves comprehension and retention of information.
Annotating is any action that deliberately interacts with a text to enhance the reader's understanding of, recall of, and reaction to the text. Sometimes called "close reading," annotating usually involves highlighting or underlining key pieces of text and making notes in the margins of the text.
To create your own Java Annotation you must use @interface Annotation_name, this will create a new Java Annotation for you. The @interface will describe the new annotation type declaration. After giving a name to your Annotation, you will need to create a block of statements inside which you may declare some variables.
The JLS specifically anticipates this, in section 9.6 Annotation Types:
If an annotation
a
(§9.7) on an annotation type declaration corresponds to an annotation typeT
, andT
has a (meta-)annotationm
that corresponds tojava.lang.annotation.Target
, thenm
must have either an element whose value isjava.lang.annotation.ElementType.ANNOTATION_TYPE
, or an element whose value isjava.lang.annotation.ElementType.TYPE
, or a compile-time error occurs.
No other part of section 9.6 or 9.7 says anything about it being illegal for an annotation declaration to be annotated with a reference to the annotation being declared.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With