| <?xml version="1.0" encoding="utf-8"?> | |
| <!--Arbortext, Inc., 1988-2006, v.4002--> | |
| <!DOCTYPE task PUBLIC "-//OASIS//DTD DITA Task//EN" | |
| "task.dtd"> | |
| <task id="tjimpear" xml:lang="en-us"> | |
| <title outputclass="id_title">Defining and using annotations</title> | |
| <shortdesc outputclass="id_shortdesc">You can use the @Interface annotation | |
| to define your own annotation definition.</shortdesc> | |
| <prolog><metadata> | |
| <keywords><indexterm>Java EE 5<indexterm>annotations</indexterm><indexterm>defining</indexterm></indexterm> | |
| </keywords> | |
| </metadata></prolog> | |
| <taskbody outputclass="id_taskbody"> | |
| <context outputclass="id_context"> <p outputclass="anchor_topictop"></p><p><b>Defining | |
| your own annotations</b></p></context> | |
| <steps> | |
| <step><cmd>Use the @Interface annotation to define your own annotation definition:</cmd> | |
| <info><p><ul> | |
| <li>Annotation definitions resemble interface definitions</li> | |
| <li>Annotation method declarations have neither parameters nor <codeph>throws</codeph> clauses, | |
| and return one of the following elements:<ul> | |
| <li>primitives</li> | |
| <li>String</li> | |
| <li>Class</li> | |
| <li>enum</li> | |
| <li>array of the above types</li> | |
| </ul></li> | |
| <li>Methods may have default values</li> | |
| </ul></p><p><codeblock>public @interface CreatedBy{ | |
| String name(); | |
| String date(); | |
| boolean contractor() default false; | |
| } </codeblock><codeblock>@CreatedBy(name = "Mary Smith",date="02/02/2008"); | |
| public class MyClass{....} </codeblock></p></info></step> | |
| </steps> | |
| <postreq outputclass="id_postreq"><p><b>Meta-annotations</b>: Meta-annotations | |
| (annotations of annotations) provide additional information on how an annotation | |
| should be used:<ul> | |
| <li>@Target<ul> | |
| <li>Restricts the use of an annotation</li> | |
| <li>Single argument must be from Enum ElementType <ul> | |
| <li>{TYPE, FIELD,METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE}</li> | |
| </ul></li> | |
| </ul></li> | |
| <li>@Retention<ul> | |
| <li>Indicates where the annotation information will be retained</li> | |
| <li>Single argument must be from Enum RetentionPolicy<ul> | |
| <li>{SOURCE, CLASS, RUNTIME}</li> | |
| </ul></li> | |
| </ul></li> | |
| <li>@Documented<ul> | |
| <li>Marker for annotations that should be included in Javadoc</li> | |
| </ul></li> | |
| <li>@Inherited<ul> | |
| <li>marker for Type annotations that are to be inherited by subtypes</li> | |
| </ul></li> | |
| </ul><b>Other built-in annotations</b>: <ul> | |
| <li>@Overrides<ul> | |
| <li>Applied to a method</li> | |
| <li>Indicates that the compiler should generate an error if the method does | |
| not actually override a superclass method.</li> | |
| </ul></li> | |
| <li>@Deprecated<ul> | |
| <li>Applied to a method</li> | |
| <li>Indicates that the compiler should generate a warning when the method | |
| is used externally</li> | |
| </ul></li> | |
| <li>@SuppressWarnings<ul> | |
| <li>Applies to a type or a method</li> | |
| <li>Indicates that the compiler should supress warnings for that element and | |
| all subelements<p><codeblock>@Deprecated | |
| public void oldMethod() {...} | |
| @ SupressWarnings | |
| public void yesIknowIuseDeprecatedMethods() {...}</codeblock></p></li> | |
| </ul></li> | |
| </ul></p><p outputclass="anchor_topicbottom"></p></postreq> | |
| </taskbody> | |
| </task> |