JAVA從J2SE5開始提供名為annotation(注釋,標注)的功能。Java的annotation,可以附加在package, class, method, field等上面,相當于給它們添加了額外的輔助信息。附加在package, class, method, field等上的Annotation,如果沒有外部解析工具等對其加以解析和處理的情況,本身不會對Java的源代碼或class等產生任何影響,也不會對它們的執行產生任何影響。
但借助外部工具,比如javac,EJB容器等,可以對附加在package, class, method, field的annotation進行解析,可以根據annotation而做出相應的處理,比如運行時改變對象/方法的行為。
Java標準Annotation
@Deprecated 相當于Javadoc的@deprecated,被@Deprecated標注的對象class, method等被注明為不推薦使用。主要用于javac等編譯工具。
@Override 注明對象method重載了父類的方法。javac等編譯工具編譯時會根據此Annotation判斷重載方法是否正確。
@SuppressWarnings 告訴javac等編譯器忽略所指定的特定的警告信息。
@Target 被定義的annotation可以附加在那些對象上。
@Retention annotation的作用期間。
Java標準Annotation的使用
@Deprecated:
@Deprecated
public class TestBean {
…
}
@SuppressWarnings
@SuppressWarnings("serial")
public class TestBean implements java.io.Serializable {
…
}
@SuppressWarnings(value = {"serial", "unchecked"})
public String doSth() {
…
}
@Override
@Override
public String doSth() {
…
}
Annotation的定義
定義方法:
@interface Annotation名 {定義體}
定義例1:
public @interface MyAnnotation {}
該例定義了一個無任何屬性/方法的Annotation。
定義例2:
public @interface MyAnnotation {
public String value();
}
該例定義了只有一個方法為value()的Annotation。一般來說,只有一個方法的Annotation,方法名一定定義為value。
定義例3:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
public String value();
public String [] multiValues();
int number() default 0;
}
該例定義了一個具有多方法的Annotation。并設置其中一個方法number的默認值為0。multiValues 方法定義為數組類型。Annotation定義可以用MetaAnnotation(元注釋)修飾。MetaAnnotation有以下2個:
@Retention
@Target
我們將在以下對@Retention與@Target加以說明。
@Retention
@Retention 可以設置為RetentionPolicy類型的值。
例:
@Retention(RetentionPolicy.RUNTIME)
RetentionPolicy的值 |
說明 |
RetentionPolicy.CLASS |
annotation信息將被編譯器編譯時保存在class文件中,但執行時不會在VM裝載。也就是說不能在執行時動態取得annotation信息。未設置@Retention時這將是默認設置值。 |
RetentionPolicy.RUNTIME |
annotation信息將被編譯器編譯時保存在class文件中,執行時也會被VM裝載。 |
RetentionPolicy.SOURCE |
annotation信息將被編譯器編譯時舍棄掉。 |
@Target
@Target表明Annotation可以附加在哪種JAVA元素之上,可以設置為java.lang.annotation.ElementType數組類型的值。
使用例1:
@Target(ElementType.METHOD)
使用例2:
@Target(value={ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.METHOD})
ElementType是一個枚舉類型,它具有以下定義:
ElementType值 |
說明 |
ElementType.ANNOTATION_TYPE |
應用于其他注解的元注解 |
ElementType.CONSTRUCTOR |
構造函數 |
ElementType.FIELD |
字段 |
ElementType.LOCAL_VARIABLE |
方法中的本地變量 |
ElementType.METHOD |
方法 |
ElementType.PACKAGE |
包 |
ElementType.PARAMETER |
方法的參數 |
ElementType.TYPE |
類,接口或者枚舉聲明 |
posted on 2009-02-27 17:16
ID刀 閱讀(282)
評論(0) 編輯 收藏 所屬分類:
JAVA_Base