java annotation應用_java Annotation的應用

一、Annotation 示例

Override Annotation

1 @Override2 public void onCreate(Bundle savedInstanceState);

二、Annotation 概念及作用

1 概念

An annotation is a form of metadata, that can be added to Java source code. Classes, methods, variables, parameters and packages may be annotated. Annotations have no direct effect on the operation of the code they annotate.

能夠添加到 Java 源代碼的語法元數據。類、方法、變量、參數、包都可以被注解,可用來將信息元數據與程序元素進行關聯。Annotation 中文常譯為“注解”。

2 作用

a. 標記,用于告訴編譯器一些信息

b. 編譯時動態處理,如動態生成代碼

c. 運行時動態處理,如得到注解信息

三、Annotation 分類

1 標準 Annotation

包括 Override, Deprecated, SuppressWarnings,標準 Annotation 是指 Java 自帶的幾個 Annotation,上面三個分別表示重寫函數,不鼓勵使用(有更好方式、使用有風險或已不在維護),忽略某項 Warning

2 元 Annotation

@Retention, @Target, @Inherited, @Documented,元 Annotation 是指用來定義 Annotation 的 Annotation,在后面 Annotation 自定義部分會詳細介紹含義

3 自定義 Annotation

自定義 Annotation 表示自己根據需要定義的 Annotation,定義時需要用到上面的元 Annotation

這里只是一種分類而已,也可以根據作用域分為源碼時、編譯時、運行時 Annotation,后面在自定義 Annotation 時會具體介紹。

四、Annotation 自定義

1 調用

1 public classApp {2

3 @MethodInfo(4 author = “trinea.cn+android@gmail.com”,5 date = "2014/02/14",6 version = 2)7 publicString getAppName() {8 return "trinea";9 }10 }

這里是調用自定義 Annotation——MethodInfo 的示例,MethodInfo Annotation 作用為給方法添加相關信息,包括 author、date、version。

2 定義

1 @Documented2 @Retention(RetentionPolicy.RUNTIME)3 @Target(ElementType.METHOD)4 @Inherited5 public @interfaceMethodInfo {6

7 String author() default "trinea@gmail.com";8

9 String date();10

11 int version() default 1;12 }

這里是 MethodInfo 的實現部分

(1). 通過 @interface 定義,注解名即為自定義注解名

(2). 注解配置參數名為注解類的方法名,且:

a. 所有方法沒有方法體,沒有參數沒有修飾符,實際只允許 public & abstract 修飾符,默認為 public ,不允許拋異常

b. 方法返回值只能是基本類型,String, Class, annotation, enumeration 或者是他們的一維數組

c. 若只有一個默認屬性,可直接用 value() 函數。一個屬性都沒有表示該 Annotation 為 Mark Annotation

(3). 可以加 default 表示默認值

3 元 Annotation

@Documented 是否會保存到 Javadoc 文檔中

@Retention 保留時間,可選值 SOURCE(源碼時),CLASS(編譯時),RUNTIME(運行時),默認為 CLASS,值為 SOURCE 大都為 Mark Annotation,這類 Annotation 大都用來校驗,比如 Override, Deprecated, SuppressWarnings

@Target 可以用來修飾哪些程序元素,如 TYPE, METHOD, CONSTRUCTOR, FIELD, PARAMETER 等,未標注則表示可修飾所有

@Inherited 是否可以被繼承,默認為 false

五、Annotation 解析

1 運行時 Annotation 解析

(1) 運行時 Annotation 指 @Retention 為 RUNTIME 的 Annotation,可手動調用下面常用 API 解析

method.getAnnotation(AnnotationName.class);

method.getAnnotations();

method.isAnnotationPresent(AnnotationName.class);

其他 @Target 如 Field,Class 方法類似

getAnnotation(AnnotationName.class) 表示得到該 Target 某個 Annotation 的信息,因為一個 Target 可以被多個 Annotation 修飾

getAnnotations() 則表示得到該 Target 所有 Annotation

isAnnotationPresent(AnnotationName.class) 表示該 Target 是否被某個 Annotation 修飾

(2) 解析示例如下

1 public static voidmain(String[] args) {2 try{3 Class cls = Class.forName("cn.trinea.java.test.annotation.App");4 for(Method method : cls.getMethods()) {5 MethodInfo methodInfo =method.getAnnotation(6 MethodInfo.class);7 if (methodInfo != null) {8 System.out.println("method name:" +method.getName());9 System.out.println("method author:" +methodInfo.author());10 System.out.println("method version:" +methodInfo.version());11 System.out.println("method date:" +methodInfo.date());12 }13 }14 } catch(ClassNotFoundException e) {15 e.printStackTrace();16 }17 }

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271187.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271187.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙和安卓,到底有什么區別?

對于開發者來說兩個最關鍵的點值得關注:一個是 Beta 版的開發工具,一個是開源網站。開源網站在開發者大會上宣布將 HarmonyOS源代碼捐贈給中國開放原子開源基金會,并在大會上公布了鴻蒙系統的開源路線。OpenHarmony 官方源碼地址:…

錯題集03

(選擇一項) 3A: B: C: D: 正確答案是 B解析:LinkedList是實現List,Collection接口,是鏈表方式進行構建的,根據開發要求不同,可以使用LinkedList實現棧(先進先出)和堆(先進后出)這樣的數據結構。(選擇一項) 4A: B: C: D: 正確答案是 C解析:由于Hashtable是線程…

從零開始學python人工智能課程_從零開始如何學習人工智能?

想要學習人工智能?這里有一條完整路徑資源在本文中,《Analytics India》雜志給出了學習AI的最佳途徑。...科技領域的天平正在向人工智能傾斜,IT領域的技術人員正在將AI應用到現有產品中。但是對于企業來說, AI人才才是關鍵。企業培…

項目管理基礎:軟件開發的方法介紹

軟件開發方法主要有結構化方法、原型化方法、面向對象開發方法、敏捷方法。1、結構化方法結構化方法由結構化分析、結構化設計、結構化程序設計組成,它是一種面向數據流的開發方法。結構化分析:依據分解與抽象的原則,按照系統中數據處理的流程…

類加載器子系統的作用

類加載器子系統的作用

Magento Block設計分析(深入分析)

Magento中Block是一個很重要的組件,它在Block中充當非常重要的角色,下面我們來分析一下Magento中Block是怎樣設計的,我們應該怎樣使用這個重要的角色。1、Magento Block類圖: 圖1: 繼承Varien_Object的對象都有一個_data類變量,用…

JAVA輸出x和y和z_JAVA實例:輸入三個整數x,y,z,請把這三個數由小到大輸出-吾愛編程網...

今天為大家分享一個java經典實例輸入三個整數x,y,z,請把這三個數由小到大輸出,相信很多初學者都會學到這道題目,接下來吾愛編程為大家介紹一下程序的相關寫法,有需要的小伙伴可以參考一下:1、題目:輸入三個整數x,y,z,請…

軟件項目管理相關概念介紹筆記

1、成本估算由于軟件項目具有可見性差、難定量化的特點,一般情況下很難在項目完成前準確的評估軟件項目開發的工作量和費用。通常會根據以往開發類似項目的經驗來進行成本估算。也可以將整個項目劃分為若干個子系統或按照軟件的生命周期的各個階段分別進行費用估算&…

python爬取微博熱搜_Python 超簡單爬取微博熱搜榜數據

微博的熱搜榜對于研究大眾的流量有非常大的價值。今天的教程就來說說如何爬取微博的熱搜榜。 熱搜榜的鏈接是:用瀏覽器瀏覽,發現在不登錄的情況下也可以正常查看,那就簡單多了。使用開發者工具(F12)查看頁面邏輯,并拿到每條熱搜的…

LeetCode14 Longest Common Prefix

題意: Write a function to find the longest common prefix string amongst an array of strings. (Easy) 這兩天實驗室項目太忙了, 老板各種活,只能挑著先水幾道easy題,這兩個題是昨天做的沒來得及寫總結。 分析: 暴…

類加載器ClassLoader的角色

類加載器ClassLoader的角色

軟件項目管理:進度管理相關概念介紹

軟件項目管理當中,項目進度的合理安排是如期完成軟件項目的重要基礎,也是合理分配資源的重要依據。項目進度安排是項目管理工作當中非常重要的組成部分。軟件開發項目進度安排的方式:1、系統最終交付日期已經確定,軟件開發部門必須…

ios開發 多人語音聊天_手游語音市場的現狀、機遇與挑戰

文/手游那點事小魚原創2014年持續火熱的手游市場成就了一大批企業的上市夢,同時也在大環境下產生了對系列手游增值服務的需求。基于玩家對手游社交性的需求,以及借鑒傳統端游,頁游中成功的社交體系,手游市場逐步出現了對手游語音的…

linux 下運行 tomcat

一開始找不到表名,原來mysql 表名區分大小寫。 修改參數 lower_case_table_names1 成功運行后不能通過瀏覽器訪問! 開啟8080端口 一、關閉防火墻 firewall-cmd --state 查看狀態 [rootVM_7_88_centos /]# firewall-cmd --state running [rootVM_7_88…

軟件項目管理:軟件工具與開發環境相關知識介紹

1、軟件工具相關名詞概念軟件工具:用來輔助軟件開發、運行、維護、管理等過程中的活動軟件。軟件開發環境:是指支持軟件產品開發的軟件系統,它由軟件工具集和環境集成機制構成。軟件工具集:包括支持軟件開發相關過程、活動、任務的…

apollo java客戶端_攜程配置中心Apollo的Java客戶端API的使用

一、SpringBoot集成1.發布配置信息設置本機為DEV環境:Linux在/opt/settings/server.properties增加配置envDEV,windows在c:\opt\settings\server.properties圖1 在apollo portal上新建項目后,默認就有了application命名空間。在DEV環境下新建…

JNI----Native本地方法接口

Native本地方法接口 JNI:Java Native Interface 本地接口的作用是融合不同的編程語言為Java所用,它的初衷是融合C/C程序 native:凡是帶native關鍵字的,說明java的作用范圍達不到了,會去調用底層c語言的庫&#xff01…

python的flag是什么意思_網上老說的flag是什么意思

近些年,國內的網絡發展速度還是很快的,大家可以通過網絡了解很多的東西,因此網絡上也有很多熱詞開始流行起來,其中flag算是十分流行的一個詞匯,網上老說的flag是什么意思?立個flag是什么梗?可能還有一些朋友并不是很…

項目管理基礎:系統分析相關概念介紹

1、系統分析的主要任務系統分析主要任務是對現行的系統進一步詳細調查,將調查得到的資料集中,對組織內部整體管理狀況和信息處理過程進行分析,為系統開發提供所需要的資料,并提交系統方案說明書。2、系統分析的主要階段系統分析主…

java線程池和線程實例化_淺談Java 線程池原理及使用方式

一、簡介什么是線程池?池的概念大家也許都有所聽聞,池就是相當于一個容器,里面有許許多多的東西你可以即拿即用。java中有線程池、連接池等等。線程池就是在系統啟動或者實例化池時創建一些空閑的線程,等待工作調度,執…