中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中的常用注解怎么使用

發布時間:2022-02-28 10:25:40 來源:億速云 閱讀:135 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Java中的常用注解怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java中的常用注解怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    一、注解是什么

    Java 注解用于為 Java 代碼提供元數據,看完這句話也許你還是一臉懵逼,用人話說就是注解不直接影響你的代碼執行,僅提供信息。接下我將從注解的定義、元注解、注解屬性、自定義注解、注解解析JDK 提供的注解這幾個方面再次了解注解(Annotation)

    二、jdk支持的注解有哪些

    2.1 三種常用的注解:

    @SuppressWarnings     該注解的作用是阻止編譯器發出某些警告信息。它可以有以下參數:  

    deprecation :過時的類或方法警告。    
    unchecked:執行了未檢查的轉換時警告。    
    allthrough:當Switch程序塊直接通往下一種情況而沒有Break時的警告。    
    path:在類路徑、源文件路徑等中有不存在的路徑時的警告。        
    serial:當在可序列化的類上缺少serialVersionUID定義時的警告。     
    finally:任何finally子句不能完成時的警告。       
    all:關于以上所有情況的警告

    @Deprecated       該注解的作用是標記某個過時的類或方法。

    @Override     該注解用在方法前面,用來標識該方法是重寫父類的某個方法。

    2.2 元注解

    元注解主要是用來注解自定義注解的注解,分別有@Retention、 @Target、 @Document、 @Inherited和@Repeatable(JDK1.8加入)五種。

    下面講兩個平常最常用的注解:

    @Retention 注解的生命周期,主要有

    RetentionPolicy.SOURCE 僅存在于源碼中
     
    RetentionPolicy.CLASS 默認的策略,在class字節碼文件中存在,但運行時無法獲得
     
    RetentionPolicy.RUNTIME 在運行時可以通過反射獲取到,也是最常用的。

    @Target 注解的作用目標,主要有

     ElementType.TYPE  作用接口、類、枚舉、注解
     
     ElementType.FIELD 作用屬性字段、枚舉的常量
     
     ElementType.METHOD 作用方法
     
     ElementType.PARAMETER 作用方法參數
     
     ElementType.CONSTRUCTOR 作用構造函數
     
     ElementType.LOCAL_VARIABLE 作用局部變量
     
     ElementType.ANNOTATION_TYPE 作用于注解(@Retention注解中就使用該屬性)
     
     ElementType.PACKAGE 作用于包
     
     ElementType.TYPE_PARAMETER 作用于類型泛型,即泛型方法、泛型類、泛型接口 (jdk1.8加入)

    三、注解實例

    在枚舉中編譯器只會限制枚舉的名字不能重復,在開發中經常會遇到枚舉Id 重復的問題,因為每個人在開發功能的時候一般只會專注于自己的功能,做完只會直接提交代碼,不會注意到枚舉Id沖突,這個時候可以使用下面的代碼進行枚舉自檢,在項目的開發階段就能及時發現代碼的問題。下面的代碼稍微修改下就可以在項目中使用,拿走不寫。

    1、自定義注解

    檢測枚舉的key 是否有重復

    package org.pdool.anno;
     
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    /**
    * @author 香菜
    */
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface CheckEnum {
    }

    2、在對應的方法上增加注解

    package org.pdool.anno;
    /**
    * 資源枚舉類
    * @author 香菜
    */
    public enum ResType {
       GOLD(1),
       DIAMOND(2),
       //注意:此處重復
       SILVER(2);
       int type;
     
       @CheckEnum
       public int getType() {
           return type;
      }
     
       ResType(int type) {
           this.type = type;
      }
    }

    3、在項目啟動的時候檢查注解的枚舉

    package org.pdool.anno;
     
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.HashSet;
    import java.util.Set;
     
    /**
    * @author 香菜
    */
    public class Aain {
       public static void main(String[] args) throws InvocationTargetException,IllegalAccessException {
           // 獲取有注解的方法
           Method[] declaredMethods = ResType.class.getDeclaredMethods();
           Method annoMethod = null;
           for (Method declaredMethod : declaredMethods) {
               CheckEnum  annotation = declaredMethod.getAnnotation(CheckEnum.class);
               if (annotation != null){
                   annoMethod = declaredMethod;
                  break;
              }
          }
           Set<Object> set = new HashSet<>();
           // 遍歷每個枚舉的id
           Object[] oo = ResType.class.getEnumConstants();
           for (Object o : oo) {
               Object invoke = annoMethod.invoke(o);
               if (!set.contains(invoke)){
                   set.add(invoke);
              }else {
                   System.out.println("重復的key "+ o +" -- "+ invoke);
              }
          }
      }
    }

    注:上面的代碼只是簡單的實例,只是為了展示核心代碼,在項目中使用時可以修改類的獲取為掃描項目下的包,遍歷所有的枚舉,就可以在項目中使用了。

    讀到這里,這篇“Java中的常用注解怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    嘉定区| 雅安市| 海南省| 紫阳县| 吉水县| 南城县| 依安县| 赤城县| 福清市| 离岛区| 广昌县| 惠东县| 静海县| 葫芦岛市| 曲周县| 固原市| 红安县| 峡江县| 丰宁| 涡阳县| 苍南县| 黄梅县| 嵊泗县| 芜湖市| 宁波市| 涿鹿县| 长治县| 余庆县| 自贡市| 南陵县| 石屏县| 益阳市| 偏关县| 瓮安县| 北安市| 凤冈县| 西宁市| 西乌珠穆沁旗| 石台县| 资中县| 清水县|