欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的注解與注解處理器

 更新時間:2023年11月06日 08:59:49   作者:騎個小蝸牛  
這篇文章主要介紹了Java中的注解與注解處理器,元注解的作用是負責注解其他注解, Java5.0定義了4個標準的meta-annotation(元注解)類型,它們被用來提供對其它注解類型進行說明,需要的朋友可以參考下

元注解

元注解的作用是負責注解其他注解。 Java5.0定義了4個標準的meta-annotation(元注解)類型,它們被用來提供對其它注解類型進行說明。

@Target

注解的作用目標,可以在哪些地方使用該注解。

注解的屬性

屬性名稱屬性類型屬性默認值屬性描述
valueElementType[]注解的作用目標元素類型枚舉集合

ElementType枚舉的取值

  • TYPE:類,接口、枚舉、注解
  • FIELD:字段、枚舉的常量
  • METHOD:方法
  • PARAMETER:參數(shù)
  • CONSTRUCTOR:構造器
  • LOCAL_VARIABLE:局部變量
  • ANNOTATION_TYPE:注解
  • PACKAGE:包

@Retention

注解的保留策略,注解何種情況下仍然存在。

注解的屬性

屬性名稱屬性類型屬性默認值屬性描述
valueRetentionPolicy注解的保留策略

RetentionPolicy枚舉的取值

  • SOURCE:源文件中存在,編譯后的Class文件不存在
  • CLASS:源文件、Class文件中存在,運行時不存在
  • RUNTIME:源文件、Class文件、運行時都存在,所以可以在運行中通過反射獲取到注解信息

@Documented

將此注解包含在javadoc中 。它代表著此注解會被javadoc工具提取成文檔。

@Inherited

允許子類繼承父類中的注解。如果一個使用了@Inherited 修飾的注解被用于一個類,則這個注解也將被用于該類的子類。

內置注解

@Override

指明被注解修飾的方法是覆寫父類中的方法。

如果某個方法使用了該注解,卻沒有覆寫父類中的方法,編譯器就會生成一個錯誤。

在子類中覆寫父類或接口的方法的過程中,@Overide其實并不是必須的。但是還是建議使用這個注解。如果加了@Overide注解,在你沒有正確覆寫父類方法的情況下,編譯器會有錯誤提示信息。

覆寫失敗的情況舉例

  • 子類方法的大小寫寫錯了、或者參數(shù)錯了、或者是子類自己定義的方法;
  • 修改了父類的方法的名字,那么之前重寫的子類方法將不再屬于重寫。

@Deprecated

指明被注解修飾的類、方法、變量等不建議使用。

當編譯器遇到了使用@Deprecated修飾的類、方法、變量等時會提示相應的警告信息。

@Suppresswarnings

關閉編譯器生成的警告信息??梢孕揎楊?、方法、變量等。

它可以達到抑制編譯器編譯時產生警告的目的,使用@SuppressWarnings注解,采用就近原則,比如一個方法出現(xiàn)警告,盡量使用@SuppressWarnings注解這個方法,而不是注解方法所在的類。所屬范圍越小越好,因為范圍大了,不利于發(fā)現(xiàn)該類下其他方法的警告信息。

但是不太建議使用@SuppressWarnings注解,使用此注解,開發(fā)人員看不到編譯時編譯器提示的相應的警告,不能選擇更好、更新的類、方法或者不能編寫更規(guī)范的編碼。同時后期更新JDK、jar包等源碼時,使用@SuppressWarnings注解的代碼可能受新的JDK、jar包代碼的支持,出現(xiàn)錯誤,仍然需要修改。

注解處理器

注解處理器(Annotation Processor Tool)簡稱APT,它是用于注解處理的命令行程序,它可以找到源碼中對應注解的對象并使用注解處理器對其進行處理。

Java中有默認的注解處理器,使用者也可以自定義注解處理器,注冊后使用注解處理器處理注解,最終達到注解本身起到的效果。

注解處理器的原理就是:在需要使用的元素上(類、變量、方法、參數(shù)等)加上注解,然后在編譯時把使用了這個注解的元素都收集起來,做統(tǒng)一的處理。不管是運行時注解還是編譯時注解,都會通過處理器在編譯時進行掃描和處理注解。

注解處理器將標記了注解的類,變量等作為輸入內容,經過注解處理器處理,生成想要生成的java代碼。所以處理器可以理解為就是一個生成代碼的工具,只是是通過注解的規(guī)則生成。生成后的代碼,可以看作是同一般代碼,最終被編譯。

讀取注解

讀取注解的核心是java.lang.reflect.AnnotatedElement接口。該接口用于獲取類、方法、字段等的注解信息。

實現(xiàn)了這個接口的實現(xiàn)類的實例對象代表了在當前JVM中的一個“被注解元素”。使用這個接口中聲明的方法可以讀?。ㄍㄟ^Java的反射機制)“被注解元素”的注解。

這個接口中的所有方法返回的注解都是不可變的、并且都是可序列化的。因此這個接口中所有方法返 回的數(shù)組可以被調用者修改,而不會影響其返回給其他調用者的數(shù)組。

接口的常用方法

  • default boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)

判斷該元素是否存在指定類型的注解,存在返回true,否則返回false。注意:此方法會忽略注解對應的注解容器。

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

返回該元素上存在的指定類型的注解,如果該類型注解不存在,則返回null。

  • Annotation[] getAnnotations()

返回該元素上存在的所有注解,若沒有注解,返回空數(shù)組。

  • default <T extends Annotation> T[] getAnnotationsByType(Class\<T> annotationClass)

返回元素上存在的指定類型的注解數(shù)組,沒有注解對應類型的注解時,返回空數(shù)組。

該方法的調用者可以隨意修改返回的數(shù)組,而不會對其他調用者返回的數(shù)組產生任何影響。

該方法與getAnnotation的區(qū)別在于:getAnnotationsByType會檢測注解對應的重復注解容器。若該元素為類,當前類上找不到注解,且該注解為可繼承的,則會去父類上檢測對應的注解。

  • default <T extends Annotation> T getDeclaredAnnotation(Class\<T> annotationClass)

返回該元素上直接存在的指定類型的注解,如果該類型注解不存在,則返回null。

該方法與此接口中的其他方法有所不同,該方法會忽略繼承的注解。如果注解沒有直接存在于此元素上,而是存在于元素的父類上,也會返回null。

  • default <T extends Annotation> T[] getDeclaredAnnotationsByType(Class\<T> annotationClass)

返回元素上存在的指定類型的注解數(shù)組,沒有注解對應類型的注解時,返回空數(shù)組。該方法會忽略繼承的注解。

  • Annotation[] getDeclaredAnnotations()

返回該元素上存在的所有注解,若沒有注解,返回空數(shù)組。該方法將忽略繼承的注解。

接口的部分實現(xiàn)類

  • AccessibleObject:可訪問對象,如:方法、構造器、屬性等
  • Class:類
  • Constructor:構造器
  • Executable:可執(zhí)行的,如:構造器、方法
  • Field:屬性
  • Method:方法
  • Package:包
  • Parameter:參數(shù)

接口的部分子接口

  • AnnotatedArrayType :被注解的數(shù)組類型
  • AnnotatedParameterizedType :被注解的參數(shù)化類型
  • AnnotatedType :被注解的類型
  • AnnotatedTypeVariable :被注解的類型變量
  • AnnotatedWildcardType :被注解的通配類型
  • GenericDeclaration :通用聲明,用于表示聲明型元素,如:類、方法、構造器等
  • TypeVariable<D> :類型變量

到此這篇關于Java中的注解與注解處理器的文章就介紹到這了,更多相關Java注解處理器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java變量與常量一文全掌握(包含常量類、interface 與 final 的比較)

    Java變量與常量一文全掌握(包含常量類、interface 與 final 的比較)

    本文介紹Java變量與常量的基本概念,涵蓋變量分類(局部/實例/類)、聲明語法及使用場景,常量定義方式(final/字面量/枚舉)與命名規(guī)范,結合實例代碼給大家的非常詳細,感興趣的朋友一起看看吧
    2025-08-08
  • Java源碼解析之Gateway請求轉發(fā)

    Java源碼解析之Gateway請求轉發(fā)

    今天給大家?guī)淼氖顷P于Java的相關知識,文章圍繞著Gateway請求轉發(fā)展開,文中有非常詳細介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Springboot配置管理Externalized?Configuration深入探究

    Springboot配置管理Externalized?Configuration深入探究

    這篇文章主要介紹了Springboot配置管Externalized?Configuration深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • java 兩個數(shù)組合并的幾種方法

    java 兩個數(shù)組合并的幾種方法

    本篇文章主要介紹了java 兩個數(shù)組合并的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • java基礎入門之IO流

    java基礎入門之IO流

    流是一種抽象概念,它代表了數(shù)據(jù)的無結構化傳遞。。用來進行輸入輸出操作的流就稱為IO流。換句話說,IO流就是以流的方式進行輸入輸出
    2021-06-06
  • Springboot2.0處理自定義異常并返回json

    Springboot2.0處理自定義異常并返回json

    這篇文章主要介紹了Springboot2.0處理自定義異常并返回json,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • 關于springmvc報錯404的問題

    關于springmvc報錯404的問題

    這篇文章主要介紹了關于springmvc報錯404的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • java實現(xiàn)錄音播放功能

    java實現(xiàn)錄音播放功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)錄音播放功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java8如何通過Lambda處理List集合

    Java8如何通過Lambda處理List集合

    這篇文章主要介紹了java8如何通過Lambda處理List集合,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Java中的線程池如何實現(xiàn)線程復用

    Java中的線程池如何實現(xiàn)線程復用

    這篇文章主要介紹了Java中的線程池如何實現(xiàn)線程復用問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評論