最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的注解與注解處理器

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

元注解

元注解的作用是負(fù)責(zé)注解其他注解。 Java5.0定義了4個(gè)標(biāo)準(zhǔn)的meta-annotation(元注解)類型,它們被用來提供對(duì)其它注解類型進(jìn)行說明。

@Target

注解的作用目標(biāo),可以在哪些地方使用該注解。

注解的屬性

屬性名稱屬性類型屬性默認(rèn)值屬性描述
valueElementType[]注解的作用目標(biāo)元素類型枚舉集合

ElementType枚舉的取值

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

@Retention

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

注解的屬性

屬性名稱屬性類型屬性默認(rèn)值屬性描述
valueRetentionPolicy注解的保留策略

RetentionPolicy枚舉的取值

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

@Documented

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

@Inherited

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

內(nèi)置注解

@Override

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

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

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

覆寫失敗的情況舉例

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

@Deprecated

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

當(dāng)編譯器遇到了使用@Deprecated修飾的類、方法、變量等時(shí)會(huì)提示相應(yīng)的警告信息。

@Suppresswarnings

關(guān)閉編譯器生成的警告信息??梢孕揎楊悺⒎椒?、變量等。

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

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

注解處理器

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

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

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

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

讀取注解

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

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

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

接口的常用方法

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

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

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

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

  • Annotation[] getAnnotations()

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

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

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

該方法的調(diào)用者可以隨意修改返回的數(shù)組,而不會(huì)對(duì)其他調(diào)用者返回的數(shù)組產(chǎn)生任何影響。

該方法與getAnnotation的區(qū)別在于:getAnnotationsByType會(huì)檢測(cè)注解對(duì)應(yīng)的重復(fù)注解容器。若該元素為類,當(dāng)前類上找不到注解,且該注解為可繼承的,則會(huì)去父類上檢測(cè)對(duì)應(yīng)的注解。

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

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

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

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

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

  • Annotation[] getDeclaredAnnotations()

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

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

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

接口的部分子接口

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

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

相關(guān)文章

  • Java中的線程池ThreadPoolExecutor細(xì)致講解

    Java中的線程池ThreadPoolExecutor細(xì)致講解

    這篇文章主要介紹了Java中的線程池ThreadPoolExecutor細(xì)致講解,線程池是一種基于池化思想管理線程的工具,經(jīng)常出現(xiàn)在多線程服務(wù)器中,如MySQL,線程過多會(huì)帶來額外的開銷,其中包括創(chuàng)建銷毀線程的開銷、調(diào)度線程的開銷等等,需要的朋友可以參考下
    2023-11-11
  • Java統(tǒng)計(jì)一個(gè)字符串在另外一個(gè)字符串出現(xiàn)次數(shù)的方法

    Java統(tǒng)計(jì)一個(gè)字符串在另外一個(gè)字符串出現(xiàn)次數(shù)的方法

    這篇文章主要介紹了Java統(tǒng)計(jì)一個(gè)字符串在另外一個(gè)字符串出現(xiàn)次數(shù)的方法,涉及java字符串遍歷、正則匹配等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • MyBatisPlus-QueryWrapper多條件查詢及修改方式

    MyBatisPlus-QueryWrapper多條件查詢及修改方式

    這篇文章主要介紹了MyBatisPlus-QueryWrapper多條件查詢及修改方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java實(shí)現(xiàn)雪花算法的原理和實(shí)戰(zhàn)教程

    Java實(shí)現(xiàn)雪花算法的原理和實(shí)戰(zhàn)教程

    這篇文章主要介紹了Java實(shí)現(xiàn)雪花算法的原理和實(shí)戰(zhàn)教程,本文通過語言表述和代碼的實(shí)現(xiàn)講解了該項(xiàng)算法,,需要的朋友可以參考下
    2021-06-06
  • Java中List集合對(duì)象去重及按屬性去重的8種方法

    Java中List集合對(duì)象去重及按屬性去重的8種方法

    這篇文章主要介紹了Java中List集合對(duì)象去重及按屬性去重的8種方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一地的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java接口和抽象類用法實(shí)例總結(jié)

    Java接口和抽象類用法實(shí)例總結(jié)

    這篇文章主要介紹了Java接口和抽象類用法,結(jié)合實(shí)例形式總結(jié)分析了Java接口與抽象類的具體定義、使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2015-12-12
  • SpringBoot短鏈接跳轉(zhuǎn)的代碼實(shí)現(xiàn)

    SpringBoot短鏈接跳轉(zhuǎn)的代碼實(shí)現(xiàn)

    短鏈跳轉(zhuǎn)是一種通過將長(zhǎng)鏈接轉(zhuǎn)換為短鏈接的方式,以便在互聯(lián)網(wǎng)上進(jìn)行鏈接共享和傳播的技術(shù),短鏈將原始長(zhǎng)鏈接通過特定算法轉(zhuǎn)換為較短的鏈接,使得它更容易分享、傳播和展示,本文給大家介紹了SpringBoot短鏈接跳轉(zhuǎn)的代碼實(shí)現(xiàn),需要的朋友可以參考下
    2024-03-03
  • java定時(shí)任務(wù)Timer和TimerTask使用詳解

    java定時(shí)任務(wù)Timer和TimerTask使用詳解

    這篇文章主要為大家詳細(xì)介紹了java定時(shí)任務(wù)Timer和TimerTask使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • MyBatis逆向工程生成dao層增刪改查的操作

    MyBatis逆向工程生成dao層增刪改查的操作

    這篇文章主要介紹了MyBatis逆向工程生成dao層增刪改查的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java 多線程交通信號(hào)燈模擬過程詳解

    java 多線程交通信號(hào)燈模擬過程詳解

    這篇文章主要介紹了java 多線程交通信號(hào)燈模擬過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論

交城县| 桂阳县| 扶沟县| 新平| 庆元县| 梁河县| 叶城县| 南昌市| 巴林左旗| 连江县| 石屏县| 甘泉县| 山西省| 扬中市| 武城县| 汤阴县| 澎湖县| 西城区| 高碑店市| 安庆市| 于都县| 博湖县| 柘城县| 余姚市| 定西市| 栖霞市| 潼南县| 沽源县| 留坝县| 长泰县| 沈丘县| 仁寿县| 琼中| 新龙县| 广德县| 西青区| 阜阳市| 库伦旗| 会昌县| 阳城县| 东阿县|