blob: fb4f6b82195b9e827796beba2b5e78f14caaba82 [file] [log] [blame]
<?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>