国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Annotation

2019-11-09 18:44:43
字體:
來源:轉載
供稿:網友

元注解

java中元注解有四個: @Retention @Target @Document @Inherited;

@Retention:注解的保留位置          @Retention(RetentionPolicy.SOURCE) //注解僅存在于源碼中,在class字節碼文件中不包含@Retention(RetentionPolicy.CLASS) // 默認的保留策略,注解會在class字節碼文件中存在,但運行時無法獲得,@Retention(RetentionPolicy.RUNTIME) // 注解會在class字節碼文件中存在,在運行時可以通過反射獲取到   @Target:注解的作用目標        @Target(ElementType.TYPE) //類、接口(包括注解類型) 或enum聲明@Target(ElementType.FIELD) //字段、枚舉的常量@Target(ElementType.METHOD) //方法@Target(ElementType.PARAMETER) //方法參數@Target(ElementType.CONSTRUCTOR) //構造函數@Target(ElementType.LOCAL_VARIABLE)//局部變量@Target(ElementType.ANNOTATION_TYPE)//注解@Target(ElementType.PACKAGE) ///包   

@Document:說明該注解將被包含在javadoc中,沒有成員。

@Inherited:說明子類可以繼承父類中的該注解

說明:

Java內置了四種元注解。或許你要問了,這四種元注解又是哪里來的呢?我們來看看這三種元注解,得到的答案是每一種元注解又是建立在四個元注解的基礎之上的。有點自己定義自己的意思。什么時候使用這四個元注解?僅僅在你需要定義自己的注解類時。什么時候使用自定義注解類或Java內置的幾個標準注解類?當然是在普通Java類(指的是不是注解類的類如MetaAnnotation,有時候我也叫它被注解類)里使用。需要記住的是,普通Java類里并不能直接使用元注解,如果你在MetaAnnotation上面加上@Documented,肯定編譯報錯。@Target未指定任何參數的話,代表八種都包括。

MetaData

有一類事物,就可以定義一套元數據。 元數據(MetaData)相當于描述一類事物的屬性列表,并且是標準的。 參考: 元數據(MetaData) - 阮一峰的網絡日志

Inherited

Inherited作用是,使用此注解聲明出來的自定義注解,在使用此自定義注解時,如果注解在類上面時,子類會自動繼承此注解,否則的話,子類不會繼承此注解。這里一定要記住,使用Inherited聲明出來的注解,只有在類上使用時才會有效,對方法,屬性等其他無效。

1、Inherited是元注解,用來修飾自定義注解(比如CustonAnnotation)。2、類ParentClass在經CustonAnnotation修飾后,其子類ChildClass會自動繼承CustonAnnotation。3、類ParentClass的屬性和方法經CustonAnnotation修飾后,在ParentClass中有效,但其子類ChildClass如果覆蓋父類的方法,那么子類的方法無法獲取CustonAnnotation,屬性一樣的。

參考: 關于java 注解中元注解Inherited的使用詳解 - 雪峰的專欄 - 博客頻道 - CSDN.NET Java注解學習四:@Inherited的使用 - zy19982004 - ITeye技術網站

Document

Documented 注解表明這個注解應該被 javadoc工具記錄. 默認情況下,javadoc是不包括注解的. 但如果聲明注解時指定了@Documented,則它會被 javadoc 之類的工具處理, 所以注解類型信息也會被包括在生成的文檔中.javadoc中的@author、@version、@param、@return、@dePRecated、@hide、@throws、@exception、@see是標記,并不是注解;

參考: Java注解之Retention、Documented、Inherited介紹 - u013111003的博客 - 博客頻道 - CSDN.NET Android studio JavaDoc的使用

獲取注解

常用方法一:isAnnotationPresent

isAnnotationPresent:檢驗是否存在該注解

isAnnotationPresentboolean isAnnotationPresent(Class<? extends Annotation> annotationClass)

如果指定類型的注釋存在于此元素上,則返回 true,否則返回 false。此方法主要是為了便于訪問標記注釋而設計的。

參數:annotationClass - 對應于注釋類型的 Class 對象返回:如果指定注釋類型的注釋存在于此對象上,則返回 true,否則返回 false拋出:NullPointerException - 如果給定的注釋類為 null

常用方法二:getAnnotation

getAnnotation:獲取注解

getAnnotation<T extends Annotation> T getAnnotation(Class<T> annotationClass)

如果存在該元素的指定類型的注釋,則返回這些注釋,否則返回 null。

參數:annotationClass - 對應于注釋類型的 Class 對象返回:如果該元素的指定注釋類型的注釋存在于此對象上,則返回這些注釋,否則返回 null拋出:NullPointerException - 如果給定的注釋類為 null

常用方法三:getAnnotations

getAnnotations:獲取所有注解

getAnnotationsAnnotation[] getAnnotations()

返回此元素上存在的所有注釋。(如果此元素沒有注釋,則返回長度為零的數組。)該方法的調用者可以隨意修改返回的數組;這不會對其他調用者返回的數組產生任何影響。

返回:此元素上存在的所有注釋

常用方法四:getDeclaredAnnotations

getDeclaredAnnotations:獲取除繼承之外的所有注解,也就是直接存在于此元素上的所有注解。

getDeclaredAnnotationsAnnotation[] getDeclaredAnnotations()

返回直接存在于此元素上的所有注釋。與此接口中的其他方法不同,該方法將忽略繼承的注釋。(如果沒有注釋直接存在于此元素上,則返回長度為零的一個數組。)該方法的調用者可以隨意修改返回的數組;這不會對其他調用者返回的數組產生任何影響。

返回:直接存在于此元素上的所有注釋

java注解 - YangYiBao - 博客園 Java基礎筆記 – Annotation注解的介紹和使用 自定義注解 | IT宅.com

關于@Target(ElementType.PACKAGE)

Java注解學習三:package-info.java的使用 - zy19982004 - ITeye技術網站 另類的package-info.java文件探討 - - ITeye技術網站

在Android Studio中創建package-info.java: The best workaround is to right click on the package, New, File, and create a file called package-info.java. Once it’s there the IDE will recognize it as a Java file and you’ll get the syntax highlighting and such. How to create package-info.java in Android Studio - Stack Overflow

自定義注解

使用@interface自定義注解時,自動繼承了java.lang.annotation.Annotation接口,由編譯程序自動完成其他細節。在定義注解時,不能繼承其他的注解或接口。@interface用來聲明一個注解,其中的每一個方法實際上是聲明了一個配置參數。方法的名稱就是參數的名稱,返回值類型就是參數的類型(返回值類型只能是基本類型、Class、String、enum)。可以通過default來聲明參數的默認值。自定義注解格式: public @interface 注解名{注解體} 1.所有基本數據類型(int,float,boolean,byte,double,char,long,short) 2.String類型 3.Class類型 4.enum類型 5.Annotation類型 6.以上所有類型的數組

Annotation類型里面的參數該怎么設定:

第一,只能用public或默認(default)這兩個訪問權修飾.例如,String value();這里把方法設為defaul默認類型; 第二,參數成員只能用基本類型byte,short,char,int,long,float,double,boolean八種基本數據類型和String,Enum,Class,annotations等數據類型,以及這一些類型的數組.例如,String value();這里的參數成員就為String;  第三,如果只有一個參數成員,最好把參數名稱設為”value”,后加小括號.例:下面的例子FruitName注解就只有一個參數成員。 第四,當注解中使用的屬性名為value時,對其賦值時可以不指定屬性的名稱而直接寫上屬性值接口;除了value意外的變量名都需要使用name=value的方式賦值。

一小時搞明白自定義注解(Annotation) - 顧明偉 - 博客頻道 - CSDN.NET java自定義注解 - 永生 - ITeye技術網站 zy19982004的博客 - Java基礎分類文章列表 - ITeye技術網站 深入理解Java:注解 - 牛奶、不加糖 - 博客園 這里寫圖片描述 Java中的注解是如何工作的? - ImportNew http://www.importnew.com/10294.html

常見注解

API

Android開發過程中使用到的注解主要來自如下幾個地方:

Android SDK:在包android.annotation下;

Android Annotation Support包:在包android.support.annotation下;

JDK:在包java.lang下;

第三方框架中的自定義注解

最常見注解

@Override

屬于標記注解,不需要設置屬性值;只能添加在方法的前面,用于標記該方法是復寫的父類中的某個方法,如果在父類沒有的方法前面加上@Override注解,編譯器會報錯:

@Target({ElementType.METHOD})@Retention(RetentionPolicy.SOURCE) public @interface Override {}

@Deprecated

&emsp;屬于標記注解,不需要設置屬性值;可以對構造方法、變量、方法、包、參數標記,告知用戶和編譯器被標記的內容已不建議被使用,如果被使用,編譯器會報警告,但不會報錯,程序也能正常運行:

@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.METHOD, ElementType.PACKAGE, ElementType.PARAMETER, ElementType.TYPE}) public @interface Deprecated {}

@SuppressWarnings

&emsp;可以對構造方法、變量、方法、包、參數標記,用于告知編譯器忽略指定的警告,不用再編譯完成后出現警告信息:

@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.CONSTRUCTOR, ElementType.LOCAL_VARIABLE})@Retention(RetentionPolicy.SOURCE)public @interface SuppressWarnings { String[] value();}

@TargetApi

可以對接口、方法、構造方法標記,如果在應用中指定minSdkVersion為8,但有地方需要使用API 11中的方法,為了避免編譯器報錯,在調用API11中方法的接口、方法或者構造方法前面加上@Target(11),這樣該方法就可以使用<=11的API接口了。雖然這樣能夠避免編譯器報錯,但在運行時需要注意,不能在API低于11的設備中使用該方法,否則會crash(可以獲取程序運行設備的API版本來判斷是否調用該方法):

@Target({TYPE, METHOD, CONSTRUCTOR})@Retention(RetentionPolicy.CLASS)public @interface TargetApi { /** * This sets the target api level for the type.. */ int value();}

@SuppressLint

和@Target的功能差不多,但使用范圍更廣,主要用于避免在lint檢查時報錯:

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})@Retention(RetentionPolicy.CLASS)public @interface SuppressLint { /** * The set of warnings (identified by the lint issue id) that should be * ignored by lint. It is not an error to specify an unrecognized name. */ String[] value();}

深入淺出Java注解 - 張明云的知識共享 - 知乎專欄

Android Annotation Support包中的注解

深入淺出Java注解 - 張明云的知識共享 - 知乎專欄

DEMO源碼傳送

相關文章: APT技術 - QQ_20198405的博客 - 博客頻道 - CSDN.NET ButterKnife - qq_20198405的博客 - 博客頻道 - CSDN.NET Dagger2 - qq_20198405的博客 - 博客頻道 - CSDN.NET

注解

- -
注解 Annotation 示例、概念及作用、分類、自定義、解析,并對幾個 Android 開源庫 Annotation 原理進行簡析
注解 Android依賴注入:Dagger、RoboGuice和ButterKnife - 文章 - 伯樂在線
注解 Dagger,ButterKnife,Roboguide,AndroidAnnotations框架的依賴注入淺析 - 愛悠閑,快樂工作,悠閑生活!

AndroidAnnotation

- -
AndroidAnnotation Android注解AndroidAnnotation的使用及實現流程分析 - 簡書

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临清市| 友谊县| 江达县| 高平市| 屏南县| 漠河县| 拉孜县| 甘德县| 张家口市| 额尔古纳市| 乐亭县| 武冈市| 泾阳县| 柳林县| 九江市| 郓城县| 平和县| 禹州市| 高密市| 中方县| 湛江市| 莱芜市| 嵊泗县| 正蓝旗| 含山县| 子洲县| 禄劝| 永昌县| 昌都县| 克东县| 开阳县| 临安市| 潼南县| 肇东市| 格尔木市| 抚顺县| 张家口市| 调兵山市| 海原县| 巴彦县| 宁安市|