电竞比分网-中国电竞赛事及体育赛事平台

分享

java Annotation

 風(fēng)自向前 2011-06-19
http://yaofeng911./blog/444704

JAVAJ2SE5開始提供名為annotation(注釋,標(biāo)注)的功能。Javaannotation,可以附加在package, class, method, field等上面,相當(dāng)于給它們添加了額外的輔助信息。附加在package, class, method, field等上的Annotation,如果沒有外部解析工具等對(duì)其加以解析和處理的情況,本身不會(huì)對(duì)Java的源代碼或class等產(chǎn)生任何影響,也不會(huì)對(duì)它們的執(zhí)行產(chǎn)生任何影響。
但借助外部工具,比如javacEJB容器等,可以對(duì)附加在package, class, method, fieldannotation進(jìn)行解析,可以根據(jù)annotation而做出相應(yīng)的處理,比如運(yùn)行時(shí)改變對(duì)象/方法的行為。

Java標(biāo)準(zhǔn)Annotation

@Deprecated 相當(dāng)于Javadoc@deprecated,被@Deprecated標(biāo)注的對(duì)象class, method等被注明為不推薦使用。主要用于javac等編譯工具。
@Override
注明對(duì)象method重載了父類的方法。javac等編譯工具編譯時(shí)會(huì)根據(jù)此Annotation判斷重載方法是否正確。
@SuppressWarnings
告訴javac等編譯器忽略所指定的特定的警告信息。
@Target
被定義的annotation可以附加在那些對(duì)象上。
@Retention annotation
的作用期間

Java標(biāo)準(zhǔn)Annotation的使用

@Deprecated

1.  @Deprecated  

2.  public class TestBean {   

3.      …   

4.  }  


@SuppressWarnings

1.  @SuppressWarnings("serial")   

2.  public class TestBean implements java.io.Serializable {   

3.      …   

4.  }   

5.    

6.  @SuppressWarnings(value = {"serial""unchecked"})   

7.  public String doSth() {   

8.      …   

9.  }  


@Override

1.  @Override  

2.  public String doSth() {   

3.      …   

4.  }  


Annotation的定義

定義方法:
@interface Annotation
{定義體}
定義例1

public @interface MyAnnotation {}  


該例定義了一個(gè)無任何屬性/方法的Annotation
定義例2

1.  public @interface MyAnnotation {   

2.      public String value();   

3.  }  


該例定義了只有一個(gè)方法為value()Annotation。一般來說,只有一個(gè)方法的Annotation,方法名一定定義為value。
定義例3

1.  @Retention(RetentionPolicy.RUNTIME)   

2.  @Target(ElementType.METHOD)   

3.  public @interface MyAnnotation {   

4.      public String value();   

5.      public String [] multiValues();   

6.      int number() default 0;   

7.         

8.  }  


該例定義了一個(gè)具有多方法的Annotation。并設(shè)置其中一個(gè)方法number的默認(rèn)值為0。multiValues 方法定義為數(shù)組類型。Annotation定義可以用MetaAnnotation(元注釋)修飾。MetaAnnotation有以下2個(gè):
@Retention
@Target
我們將在以下對(duì)@Retention@Target加以說明。

@Retention

@Retention 可以設(shè)置為RetentionPolicy類型的值。
例:
@Retention(RetentionPolicy.RUNTIME)

RetentionPolicy的值

說明

RetentionPolicy.CLASS

annotation信息將被編譯器編譯時(shí)保存在class文件中,但執(zhí)行時(shí)不會(huì)在VM裝載。也就是說不能在執(zhí)行時(shí)動(dòng)態(tài)取得annotation信息。未設(shè)置@Retention時(shí)這將是默認(rèn)設(shè)置值。

RetentionPolicy.RUNTIME

annotation信息將被編譯器編譯時(shí)保存在class文件中,執(zhí)行時(shí)也會(huì)被VM裝載。

RetentionPolicy.SOURCE

annotation信息將被編譯器編譯時(shí)舍棄掉。

 

@Target

@Target表明Annotation可以附加在哪種JAVA元素之上,可以設(shè)置為java.lang.annotation.ElementType數(shù)組類型的值。
使用例1

1.  @Target(ElementType.METHOD)  


使用例2

1.  @Target(value={ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.METHOD})  

ElementType是一個(gè)枚舉類型,它具有以下定義:

ElementType

說明

ElementType.ANNOTATION_TYPE

應(yīng)用于其他注解的元注解

ElementType.CONSTRUCTOR

構(gòu)造函數(shù)

ElementType.FIELD

字段

ElementType.LOCAL_VARIABLE

方法中的本地變量

ElementType.METHOD

方法

ElementType.PACKAGE

ElementType.PARAMETER

方法的參數(shù)

ElementType.TYPE

類,接口或者枚舉聲明

 
interface和@interface的區(qū)別
首先一個(gè)是java語句,一個(gè)是java annotation

1. 什么是JAVA Annotation
Java 從1.5開始提供了 Annotation (注釋,標(biāo)注),它用來修飾應(yīng)用程序的元素(類,方法,屬性,參數(shù),本地變量,包、元數(shù)據(jù)),編譯器將其與元數(shù)據(jù)一同存儲(chǔ)在 class 文件中,運(yùn)行期間通過 Java 的反射來處理對(duì)其修飾元素的訪問。Annotation 僅僅用來修飾元素,而不能影響代碼的執(zhí)行。只有通過其配套的框架或工具才能對(duì)其信息進(jìn)行訪問和處理。

2. 區(qū)別

interface就不用說了
@interface 是用來修飾 Annotation 的,請(qǐng)注意,它不是 interface。這個(gè)關(guān)鍵字聲明隱含了一個(gè)信息:它是繼承了 java.lang.annotation.Annotation 接口,而不是聲明了一個(gè) interface。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多