亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中如何設計自己的Annotation

發布時間:2022-01-05 15:57:52 來源:億速云 閱讀:112 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關Java中如何設計自己的Annotation的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

了解一下java1.5起默認的三個annotation類型:

一個是@Override:只能用在方法之上的,用來告訴別人這一個方法是改寫父類的。

一個是@Deprecated:建議別人不要使用舊的API的時候用的,編譯的時候會用產生警告信息,可以設定在程序里的所有的元素上.

一個是@SuppressWarnings:這一個類型可以來暫時把一些警告信息消息關閉.

如果不清楚上面三個類型的具體用法,各位可以baidu或google一下的,很簡單的。

第二部分:講一下annotation的概念,再來講一下怎樣設計自己的annotation.

首先在jdk自帶的java.lang.annotation包里,打開如下幾個源文件:

1、源文件Target.java

代碼

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
 ElementType[] value();

其中的@interface是一個關鍵字,在設計annotations的時候必須把一個類型定義為@interface,而不能用class或interface關鍵字(會不會覺得sun有點吝嗇,偏偏搞得與interface這么像).

2、源文件Retention.java

代碼

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
 RetentionPolicy value();

看到這里,大家可能都模糊了,都不知道在說什么,別急,往下看一下.

在上面的文件都用到了RetentionPolicy,ElementType這兩個字段,你可能就會猜到這是兩個java文件.的確,這兩個文件的源代碼如下:

3、源文件RetentionPolicy.java

代碼

public enum RetentionPolicy {
 SOURCE,
 CLASS,
 RUNTIME

這是一個enum類型,共有三個值,分別是SOURCE,CLASS 和 RUNTIME.

SOURCE代表的是這個Annotation類型的信息只會保留在程序源碼里,源碼如果經過了編譯之后,Annotation的數據就會消失,并不會保留在編譯好的.class文件里面。

ClASS的意思是這個Annotation類型的信息保留在程序源碼里,同時也會保留在編譯好的.class文件里面,在執行的時候,并不會把這一些信息加載到虛擬機(JVM)中去.注意一下,當你沒有設定一個Annotation類型的Retention值時,系統默認值是CLASS.

第三個,是RUNTIME,表示在源碼、編譯好的.class文件中保留信息,在執行的時候會把這一些信息加載到JVM中去的.
  舉一個例子,如@Override里面的Retention設為SOURCE,編譯成功了就不要這一些檢查的信息;相反,@Deprecated里面的Retention設為RUNTIME,表示除了在編譯時會警告我們使用了哪個被Deprecated的方法,在執行的時候也可以查出該方法是否被Deprecated.

4、源文件ElementType.java

代碼

public enum ElementType {
 TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR,
 LOCAL_VARIABLE, ANNOTATION_TYPE,PACKAGE

@Target里面的ElementType是用來指定Annotation類型可以用在哪一些元素上的.說明一下:TYPE(類型), FIELD(屬性), METHOD(方法), PARAMETER(參數), CONSTRUCTOR(構造函數),LOCAL_VARIABLE(局部變量), ANNOTATION_TYPE,PACKAGE(包),其中的TYPE(類型)是指可以用在Class,Interface,Enum和Annotation類型上.

另外,從1的源代碼可以看出,@Target自己也用了自己來聲明自己,只能用在ANNOTATION_TYPE之上.
如果一個Annotation類型沒有指明@Target使用在哪些元素上,那么它可以使用在任何元素之上,這里的元素指的是上面的八種類型.

舉幾個正確的例子:

@Target(ElementType.METHOD)
@Target(value=ElementType.METHOD)
@Target(ElementType.METHOD,ElementType.CONSTRUCTOR) 

具體參考一下javadoc文檔

上面一下1和2的源文件,它們都使用了@Documented,@Documented的目的就是讓這一個設計Annotation類型的信息能夠顯示在javaAPI說明文檔上;沒有添加的話,使用javadoc生成API文檔的時候就會找不到這一個類型生成的信息.

另外一點,如果需要把Annotation的數據繼承給子類,那么就會用到@Inherited這一個Annotation類型.

感謝各位的閱讀!關于“Java中如何設計自己的Annotation”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

英超| 新邵县| 武威市| 绥化市| 白水县| 巴彦县| 鹿邑县| 永安市| 德惠市| 大兴区| 康乐县| 建阳市| 班戈县| 武乡县| 明溪县| 方城县| 托克逊县| 大宁县| 密山市| 自治县| 藁城市| 汾阳市| 克山县| 太仆寺旗| 绥芬河市| 鄢陵县| 大田县| 柏乡县| 琼结县| 思南县| 淮南市| 台东县| 南岸区| 方山县| 长宁县| 铁岭县| 封开县| 浮山县| 册亨县| 福建省| 交口县|