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

一篇文章帶你搞定JAVA注解

 更新時(shí)間:2021年07月14日 17:15:05   作者:香菜聊游戲  
這篇文章主要介紹了詳解Java注解的實(shí)現(xiàn)與使用方法的相關(guān)資料,希望通過本文大家能夠理解掌握J(rèn)ava注解的知識(shí),需要的朋友可以參考下

1、注解是什么

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

2、jdk支持的注解有哪些

2.1 三種常用的注解:

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

deprecation :過時(shí)的類或方法警告?!   ?/p>

unchecked:執(zhí)行了未檢查的轉(zhuǎn)換時(shí)警告?!   ?/p>

allthrough:當(dāng)Switch程序塊直接通往下一種情況而沒有Break時(shí)的警告。

path:在類路徑、源文件路徑等中有不存在的路徑時(shí)的警告?!   ?/p>

serial:當(dāng)在可序列化的類上缺少serialVersionUID定義時(shí)的警告?!?/p>

finally:任何finally子句不能完成時(shí)的警告?!  ?/p>

all:關(guān)于以上所有情況的警告

@Deprecated 該注解的作用是標(biāo)記某個(gè)過時(shí)的類或方法。

@Override 該注解用在方法前面,用來標(biāo)識(shí)該方法是重寫父類的某個(gè)方法。

2.2 元注解

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

下面講兩個(gè)平常最常用的注解:

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

RetentionPolicy.SOURCE 僅存在于源碼中

RetentionPolicy.CLASS 默認(rèn)的策略,在class字節(jié)碼文件中存在,但運(yùn)行時(shí)無法獲得 RetentionPolicy.RUNTIME 在運(yùn)行時(shí)可以通過反射獲取到,也是最常用的。

@Target 注解的作用目標(biāo),主要有

ElementType.TYPE 作用接口、類、枚舉、注解

ElementType.FIELD 作用屬性字段、枚舉的常量

ElementType.METHOD 作用方法

ElementType.PARAMETER 作用方法參數(shù)

ElementType.CONSTRUCTOR 作用構(gòu)造函數(shù)

ElementType.LOCAL_VARIABLE 作用局部變量

ElementType.ANNOTATION_TYPE 作用于注解(@Retention注解中就使用該屬性) ElementType.PACKAGE 作用于包 ElementType.TYPE_PARAMETER 作用于類型泛型,即泛型方法、泛型類、泛型接口 (jdk1.8加入)

3、注解實(shí)例

在枚舉中編譯器只會(huì)限制枚舉的名字不能重復(fù),在開發(fā)中經(jīng)常會(huì)遇到枚舉Id 重復(fù)的問題,因?yàn)槊總€(gè)人在開發(fā)功能的時(shí)候一般只會(huì)專注于自己的功能,做完只會(huì)直接提交代碼,不會(huì)注意到枚舉Id沖突,這個(gè)時(shí)候可以使用下面的代碼進(jìn)行枚舉自檢,在項(xiàng)目的開發(fā)階段就能及時(shí)發(fā)現(xiàn)代碼的問題。下面的代碼稍微修改下就可以在項(xiàng)目中使用,拿走不寫。

1、自定義注解

檢測(cè)枚舉的key 是否有重復(fù)

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、在對(duì)應(yīng)的方法上增加注解

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

3、在項(xiàng)目啟動(dòng)的時(shí)候檢查注解的枚舉

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<>();
       // 遍歷每個(gè)枚舉的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("重復(fù)的key "+ o +" -- "+ invoke);
          }
      }
  }
}

圖片

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

4、總結(jié)

注解雖然不影響代碼的運(yùn)行,但是可以為運(yùn)行中的程序提供更多的信息,注解也是很多框架的基本技術(shù)切入點(diǎn),比如Spring 的注解,Lombok 的各種注解,都是使用了注解做了很多事,明白了注解是怎么回事,理解框架也會(huì)輕而易舉。

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Struts2 的國際化實(shí)現(xiàn)方式示例

    Struts2 的國際化實(shí)現(xiàn)方式示例

    這篇文章主要介紹了Struts2 的國際化實(shí)現(xiàn)方式示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Spring實(shí)戰(zhàn)之ResourceLoader接口資源加載用法示例

    Spring實(shí)戰(zhàn)之ResourceLoader接口資源加載用法示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之ResourceLoader接口資源加載用法,結(jié)合實(shí)例形式分析了Spring使用ResourceLoader接口加載資源的相關(guān)配置與使用技巧,需要的朋友可以參考下
    2020-01-01
  • JDBC如何訪問MySQL數(shù)據(jù)庫,并增刪查改

    JDBC如何訪問MySQL數(shù)據(jù)庫,并增刪查改

    這篇文章主要介紹了JDBC如何訪問MySQL數(shù)據(jù)庫,幫助大家更好的理解和學(xué)習(xí)java與MySQL,感興趣的朋友可以了解下
    2020-08-08
  • 解析Mybatis判斷表達(dá)式源碼分析

    解析Mybatis判斷表達(dá)式源碼分析

    這篇文章主要介紹了Mybatis判斷表達(dá)式源碼分析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10
  • Java 8新增的方法參數(shù)反射實(shí)例分析

    Java 8新增的方法參數(shù)反射實(shí)例分析

    這篇文章主要介紹了Java 8新增的方法參數(shù)反射,結(jié)合實(shí)例形式分析了java8新增api方法參數(shù)反射相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • shiro攔截認(rèn)證的全過程記錄

    shiro攔截認(rèn)證的全過程記錄

    Apache?Shiro是一個(gè)強(qiáng)大且易用的Java安全框架,執(zhí)行身份驗(yàn)證、授權(quán)、密碼和會(huì)話管理,下面這篇文章主要給大家介紹了關(guān)于shiro攔截認(rèn)證的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • Java中Parser的用法

    Java中Parser的用法

    這篇文章主要介紹了Java?Parser使用指南,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • SpringBoot整合Security安全框架實(shí)現(xiàn)控制權(quán)限

    SpringBoot整合Security安全框架實(shí)現(xiàn)控制權(quán)限

    本文主要介紹了SpringBoot整合Security安全框架實(shí)現(xiàn)控制權(quán)限,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java中RabbitMQ延遲隊(duì)列實(shí)現(xiàn)詳解

    Java中RabbitMQ延遲隊(duì)列實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java中RabbitMQ延遲隊(duì)列實(shí)現(xiàn)詳解,消息過期后,根據(jù)routing-key的不同,又會(huì)被死信交換機(jī)路由到不同的死信隊(duì)列中,消費(fèi)者只需要監(jiān)聽對(duì)應(yīng)的死信隊(duì)列進(jìn)行消費(fèi)即可,需要的朋友可以參考下
    2023-09-09
  • IntelliJ IDEA設(shè)置顯示內(nèi)存指示器和設(shè)置內(nèi)存大小的方法

    IntelliJ IDEA設(shè)置顯示內(nèi)存指示器和設(shè)置內(nèi)存大小的方法

    這篇文章主要介紹了IntelliJ IDEA設(shè)置顯示內(nèi)存指示器和設(shè)置內(nèi)存大小的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論

黎城县| 博湖县| 徐水县| 寿阳县| 宝应县| 平邑县| 宝应县| 龙川县| 环江| 桦川县| 铜山县| 宣武区| 大理市| 漠河县| 若羌县| 宁城县| 大悟县| 南投市| 尤溪县| 定结县| 会泽县| 新泰市| 龙游县| 罗田县| 朔州市| 汶上县| 江门市| 临高县| 舒城县| 八宿县| 安宁市| 瓮安县| 仪陇县| 化隆| 衡东县| 岐山县| 上虞市| 鲁山县| 舟山市| 双柏县| 南丹县|