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

Java基礎(chǔ)元注解基本原理示例詳解

 更新時(shí)間:2023年01月17日 16:09:29   作者:九七年生于初夏  
這篇文章主要為大家介紹了Java基礎(chǔ)元注解基本原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

元注解

是負(fù)責(zé)對(duì)其它注解進(jìn)行說(shuō)明的注解,自定義注解時(shí)可以使用元注解。Java 5 定義了 4 個(gè)注解,分別是 @Documented、@Target、@Retention@Inherited。Java 8 又增加了 @Repeatable@Native 兩個(gè)注解。這些注解都可以在 java.lang.annotation 包中找到。下面主要介紹每個(gè)元注解的作用及使用。

@Documented

@Documented 是一個(gè)標(biāo)記注解,沒(méi)有成員變量。用 @Documented 注解修飾的注解類會(huì)被 JavaDoc 工具提取成文檔。默認(rèn)情況下,JavaDoc 是不包括注解的,但如果聲明注解時(shí)指定了 @Documented,就會(huì)被 JavaDoc 之類的工具處理,所以注解類型信息就會(huì)被包括在生成的幫助文檔中。

IDEA Documented 文檔生成

Tools -> Generate JavaDoc

@Target

@Target 注解用來(lái)指定一個(gè)注解的使用范圍,即被 @Target 修飾的注解可以用在什么地方。@Target 注解有一個(gè)成員變量(value)用來(lái)設(shè)置適用目標(biāo),value 是 java.lang.annotation.ElementType 枚舉類型的數(shù)組,下表為 ElementType 常用的枚舉常量。

類型適用目標(biāo)
TYPE用于類、接口(包括注解類型)或 enum 聲明
FIELD用于成員變量(包括枚舉常量)
METHOD用于方法
PARAMETER用于方法參數(shù)
CONSTRUCTOR用于構(gòu)造器
LOCAL_VARIABLE用于局部變量
ANNOTATION_TYPE用于注解
PACKAGE用于包
TYPE_PARAMETER用來(lái)類型參數(shù)(JDK 1.8新增)
TYPE_USE能標(biāo)注任何類型名稱(JDK 1.8新增)

@Retention

@Retention 描述注解的生命周期,也就是該注解被保留的時(shí)間長(zhǎng)短。@Retention 注解中的成員變量(value)用來(lái)設(shè)置保留策略,value 是 java.lang.annotation.RetentionPolicy 枚舉類型。

RetentionPolicy 有 3 個(gè)枚舉常量,如下所示:

  • SOURCE:在源文件中有效(即源文件保留);
  • CLASS:在 class 文件中有效(即 class 保留);
  • RUNTIME:在運(yùn)行時(shí)有效(即運(yùn)行時(shí)保留);

生命周期大小排序?yàn)?SOURCE < CLASS < RUNTIME,前者能使用的地方后者一定也能使用。

如果需要在運(yùn)行時(shí)去動(dòng)態(tài)獲取注解信息,那只能用 RUNTIME 注解,如 @Documented 注解;如果要在編譯時(shí)進(jìn)行一些預(yù)處理操作,比如生成一些輔助代碼,就用 CLASS 注解,如 @NonNull 注解;如果只是做一些檢查性的操作,則可選用 SOURCE 注解,如 @Override 和 @SuppressWarnings 注解。

@Inherited

@Inherited 是一個(gè)標(biāo)記注解,用來(lái)指定該注解可以被繼承。使用 @Inherited 注解的 Class 類,表示這個(gè)注解可以被用于該 Class 類的子類。就是說(shuō)如果某個(gè)類使用了被 @Inherited 修飾的注解,則其子類將自動(dòng)具有該注解。

示例

創(chuàng)建一個(gè)自定義注解,代碼如下所示:

@Target({ ElementType.TYPE })
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface MyInherited {
}

測(cè)試類代碼如下:

@MyInherited
public class TestA {
    public static void main(String[] args) {
        System.out.println(TestA.class.getAnnotation(MyInherited.class));
        System.out.println(TestB.class.getAnnotation(MyInherited.class));
        System.out.println(TestC.class.getAnnotation(MyInherited.class));
    }
}
class TestB extends TestA {
}
class TestC extends TestB {
}

運(yùn)行結(jié)果為:

@MyInherited()
@MyInherited()
@MyInherited()

@Repeatable

@Repeatable 是 Java 8 新增,它允許在相同的程序元素中重復(fù)注解,在需要對(duì)同一種注解多次使用時(shí),往往需要借助該注解。Java 8 版本以前,同一個(gè)程序元素前最多只能有一個(gè)相同類型的注解,如果需要在同一個(gè)元素前使用多個(gè)相同類型的注解,則必須使用注解“容器”。

示例

Java 8 之前的相同類型的注解做法:

public @interface Roles {
    Role[] roles();
}
public @interface Role {
    String roleName();
}
public class RoleTest {
    @Roles(roles = {@Role(roleName = "roleA"), @Role(roleName = "roleB")})
    public String doString(){
        return "MingYue Repeatable 測(cè)試";
    }
}

Java 8 之后增加了重復(fù)注解,使用方式如下:

public @interface Roles {
    Role[] value();
}
@Repeatable(Roles.class)
public @interface Role {
    String roleName();
}
public class RoleTest {
    @Role(roleName = "roleA")
    @Role(roleName = "roleB")
    public String doString(){
        return "MingYue Repeatable 測(cè)試";
    }
}

兩者不同的地方是,創(chuàng)建重復(fù)注解 Role 時(shí)加上了 @Repeatable 注解,指向存儲(chǔ)注解 Roles,這樣在使用時(shí)就可以直接重復(fù)使用 Role 注解。

@Native

@Native 注解修飾成員變量,則表示這個(gè)變量可以被本地代碼引用,常常被代碼生成工具使用。

以上就是Java基礎(chǔ)元注解基本原理示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java 元注解的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文帶你掌握J(rèn)ava?LinkedBlockingQueue

    一文帶你掌握J(rèn)ava?LinkedBlockingQueue

    LinkedBlockingQueue?是一個(gè)可選有界阻塞隊(duì)列,這篇文章主要為大家詳細(xì)介紹了Java中LinkedBlockingQueue的實(shí)現(xiàn)原理與適用場(chǎng)景,感興趣的可以了解一下
    2023-04-04
  • Java中枚舉的實(shí)現(xiàn)原理介紹

    Java中枚舉的實(shí)現(xiàn)原理介紹

    大家好,本篇文章主要講的是Java中枚舉的實(shí)現(xiàn)原理介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Spring使用hutool的HttpRequest發(fā)送請(qǐng)求的幾種方式

    Spring使用hutool的HttpRequest發(fā)送請(qǐng)求的幾種方式

    Spring HttpRequest是指Spring框架中的一個(gè)對(duì)象,它代表了HTTP客戶端發(fā)送給Web服務(wù)器的一次請(qǐng)求,本文給大家介紹了Spring使用hutool的HttpRequest發(fā)送請(qǐng)求的幾種方式,并通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • 分布式Netty源碼分析概覽

    分布式Netty源碼分析概覽

    這篇文章主要為大家介紹了分布式Netty源碼分析概覽,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例

    Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例

    本篇文章主要介紹了Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • java String.join()的使用小結(jié)

    java String.join()的使用小結(jié)

    String.join()是Java 8引入的一個(gè)實(shí)用方法,用于將多個(gè)字符串按照指定分隔符連接成一個(gè)字符串,本文主要介紹了java String.join()的使用小結(jié),感興趣的可以了解一下
    2025-03-03
  • JAVA技術(shù)實(shí)現(xiàn)上傳下載文件到FTP服務(wù)器(完整)

    JAVA技術(shù)實(shí)現(xiàn)上傳下載文件到FTP服務(wù)器(完整)

    這篇文章主要介紹了JAVA技術(shù)實(shí)現(xiàn)上傳下載文件到FTP服務(wù)器(完整),本文使用 Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服務(wù)器實(shí)現(xiàn)FTP服務(wù)器上文件的上傳/下載/刪除等操作,需要的朋友可以參考下
    2015-07-07
  • Java的遞歸算法詳解

    Java的遞歸算法詳解

    Java遞歸算法是基于Java語(yǔ)言實(shí)現(xiàn)的遞歸算法。遞歸算法對(duì)解決一大類問(wèn)題很有效,它可以使算法簡(jiǎn)潔和易于理解。接下來(lái)通過(guò)本文給大家介紹Java遞歸算法相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧
    2021-09-09
  • spring?java?動(dòng)態(tài)獲取consul?K/V的方法

    spring?java?動(dòng)態(tài)獲取consul?K/V的方法

    這篇文章主要介紹了spring?java?動(dòng)態(tài)獲取consul?K/V的相關(guān)資料,主要包括springConsul配置kv路徑以及自動(dòng)注入consulKV到服務(wù)中,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • Java的List集合中泛型使用詳解

    Java的List集合中泛型使用詳解

    這篇文章主要介紹了Java的List集合中泛型使用詳解,泛型類,如果沒(méi)有指定具體的數(shù)據(jù)類型,此時(shí),操作類型是Object,泛型的類型參數(shù)只能是類類型,不能是基本數(shù)據(jù)類型,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

科尔| 博野县| 陆川县| 福安市| 长乐市| 湘阴县| 轮台县| 民县| 孝感市| 淳安县| 米易县| 海丰县| 高淳县| 松桃| 资阳市| 宁武县| 读书| 虹口区| 汉源县| 淮阳县| 石渠县| 宜黄县| 洪泽县| 潼关县| 招远市| 海宁市| 工布江达县| 崇礼县| 南昌县| 新竹市| 湘潭县| 鹤峰县| 昆山市| 黎川县| 兰西县| 衢州市| 黄山市| 馆陶县| 扶风县| 土默特右旗| 白玉县|