註解:@Documented @Retention @Target

項目中發現自定義了一個註解:
在這裏插入圖片描述
自己定義了一個註解。這個新定義的註解有三個註解:

@Target

用於設定註解使用範圍/作用目標。
在這裏插入圖片描述
ElementType是一個枚舉類。

在這裏插入圖片描述

@Retention

註解的保留位置

  • RetentionPolicy.SOURCE:這種類型的Annotations只在源代碼級別保留,編譯時就會被忽略,在class字節碼文件中不包含。
  • RetentionPolicy.CLASS:這種類型的Annotations編譯時被保留,默認的保留策略,在class文件中存在,但JVM將會忽略,運行時無法獲得。
  • RetentionPolicy.RUNTIME:這種類型的Annotations將被JVM保留,所以他們能在運行時被JVM或其他使用反射機制的代碼所讀取和使用。

https://blog.csdn.net/fn0723/article/details/84962441

  • 這3個生命週期分別對應於:Java源文件(.java文件) —> .class文件 —> 內存中的字節碼。
  • 那怎麼來選擇合適的註解生命週期呢?
  1. 首先要明確生命週期長度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方後者一定也能作用。
  2. 一般如果需要在運行時去動態獲取註解信息,那隻能用 RUNTIME 註解,比如@Deprecated使用RUNTIME註解
  3. 如果要在編譯時進行一些預處理操作,比如生成一些輔助代碼(如 ButterKnife),就用 CLASS註解;
  4. 如果只是做一些檢查性的操作,比如 @Override 和 @SuppressWarnings,使用SOURCE 註解。
  • 註解@Override用在方法上,當我們想重寫一個方法時,在方法上加@Override,當我們方法的名字出錯時,編譯器就會報錯
  • 註解@Deprecated,用來表示某個類或屬性或方法已經過時,不想別人再用時,在屬性和方法上用@Deprecated修飾
  • 註解@SuppressWarnings用來壓制程序中出來的警告,比如在沒有用泛型或是方法已經過時的時候
  • 舉個例子:Override的源碼,作用對象爲method,註解保留在.java文件中。
    在這裏插入圖片描述
  • 舉個例子:Component註解,作用在類,接口和枚舉上。一直到內存中都存活。
    在這裏插入圖片描述
    在這裏插入圖片描述

@Documented

  • 說明該註解將被包含在javadoc中
  • Documented 註解表明這個註解應該被 javadoc工具記錄. 默認情況下,javadoc是不包括註解的. 但如果聲明註解時指定了 @Documented,則它會被 javadoc 之類的工具處理, 所以註解類型信息也會被包括在生成的文檔中.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章