亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java基礎元注解基本原理示例詳解

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

元注解

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

@Documented

@Documented 是一個標記注解,沒有成員變量。用 @Documented 注解修飾的注解類會被 JavaDoc 工具提取成文檔。默認情況下,JavaDoc 是不包括注解的,但如果聲明注解時指定了 @Documented,就會被 JavaDoc 之類的工具處理,所以注解類型信息就會被包括在生成的幫助文檔中。

IDEA Documented 文檔生成

Tools -> Generate JavaDoc

@Target

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

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

@Retention

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

RetentionPolicy 有 3 個枚舉常量,如下所示:

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

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

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

@Inherited

@Inherited 是一個標記注解,用來指定該注解可以被繼承。使用 @Inherited 注解的 Class 類,表示這個注解可以被用于該 Class 類的子類。就是說如果某個類使用了被 @Inherited 修飾的注解,則其子類將自動具有該注解。

示例

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

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

測試類代碼如下:

@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 {
}

運行結果為:

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

@Repeatable

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

示例

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 測試";
    }
}

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

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 測試";
    }
}

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

@Native

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

以上就是Java基礎元注解基本原理示例詳解的詳細內容,更多關于Java 元注解的資料請關注腳本之家其它相關文章!

相關文章

  • Spring security自定義用戶認證流程詳解

    Spring security自定義用戶認證流程詳解

    這篇文章主要介紹了Spring security自定義用戶認證流程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 如何在java 8 stream表達式實現(xiàn)if/else邏輯

    如何在java 8 stream表達式實現(xiàn)if/else邏輯

    這篇文章主要介紹了如何在java 8 stream表達式實現(xiàn)if/else邏輯,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 解決mybatis plus報錯com.microsoft.sqlserver.jdbc.SQLServerException:必須執(zhí)行該語句才能獲得結果

    解決mybatis plus報錯com.microsoft.sqlserver.jdbc.SQLServerE

    這篇文章主要介紹了解決mybatis plus報錯com.microsoft.sqlserver.jdbc.SQLServerException:必須執(zhí)行該語句才能獲得結果,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 玩轉SpringBoot2快速整合攔截器的方法

    玩轉SpringBoot2快速整合攔截器的方法

    這篇文章主要介紹了玩轉SpringBoot2快速整合攔截器的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • SpringBoot啟動時自動執(zhí)行sql腳本的方法步驟

    SpringBoot啟動時自動執(zhí)行sql腳本的方法步驟

    本文主要介紹了SpringBoot啟動時自動執(zhí)行sql腳本的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • java實現(xiàn)隊列queue數(shù)據(jù)結構詳解

    java實現(xiàn)隊列queue數(shù)據(jù)結構詳解

    大家好,本篇文章主要講的是java實現(xiàn)隊列queue數(shù)據(jù)結構詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • @Conditional注解的使用場景和源碼解析

    @Conditional注解的使用場景和源碼解析

    這篇文章主要介紹了@Conditional注解的使用場景和源碼解析,@Conditional是一個條件注解,它的作用是判斷Bean是否滿足條件,如果滿足條件,則將Bean注冊進IOC中,如果不滿足條件,則不進行注冊,需要的朋友可以參考下
    2023-11-11
  • Java進階教程之IO基礎

    Java進階教程之IO基礎

    這篇文章主要介紹了Java進階教程之IO基礎,這里只是對Java IO的基本介紹,包含讀取和寫入等操作,需要的朋友可以參考下
    2014-09-09
  • Netty網(wǎng)絡編程零基礎入門

    Netty網(wǎng)絡編程零基礎入門

    Netty是一個異步的、基于事件驅動的網(wǎng)絡應用框架,用于快速開發(fā)可維護、高性能的網(wǎng)絡服務器和客戶端,如果你還不了解它的使用,就趕快繼續(xù)往下看吧
    2022-08-08
  • Java引用傳遞和值傳遞棧內存與堆內存的指向操作

    Java引用傳遞和值傳遞棧內存與堆內存的指向操作

    這篇文章主要介紹了Java引用傳遞和值傳遞棧內存與堆內存的指向操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論