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

Java Annotation注解相關原理代碼總結

 更新時間:2020年07月07日 10:52:35   作者:Haidnor  
這篇文章主要介紹了Java Annotation注解相關原理代碼總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

Java.lang 中自帶的注解

  • @Override:表示當前的方法定義將覆蓋基類的方法。如果你不小心拼寫錯誤,或者方法簽名被錯誤拼寫的時候,編譯器就會發(fā)出錯誤提示。
  • @Deprecated:如果使用該注解的元素被調用,編譯器就會發(fā)出警告信息。
  • @SuppressWarnings:關閉不當的編譯器警告信息。
  • @SafeVarargs:在 Java 7 中加入用于禁止對具有泛型varargs參數的方法或構造函數的調用方發(fā)出警告。
  • @FunctionalInterface:Java 8 中加入用于表示類型聲明為函數式接口

如何定義注解

以下是一個為標記注解(marker annotation), 不包含任何元素

package cn.haidnor.annotation;

import java.lang.annotation.*;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
  
}

注解的定義也需要一些元注解(meta-annoation),比如 @Target 和 @Retention。

@Target 定義你的注解可以應用在哪里(例如是方法還是字段)。

@Retention 定義了注解在哪里可用,在源代碼中(SOURCE),class文件(CLASS)中或者是在運行時(RUNTIME)。

Demo 簡單實例

定義注解

以下的代碼中。Target 定義只能在方法上使用,Retention 定義保留域

package cn.haidnor.annotation;

import java.lang.annotation.*;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase {
  int id();
  String description() default "no description";
}

在類中使用注解

package cn.haidnor.clazz;
package cn.haidnor.clazz;
import cn.haidnor.annotation.UseCase;
import java.util.List;

public class PasswordUtils {
  @UseCase(id = 47, description ="Passwords must contain at least one numeric")
  public boolean validatePassword(String passwd) {
    return (passwd.matches("\\w*\\d\\w*"));
  }
  @UseCase(id = 48)
  public String encryptPassword(String passwd) {
    return new StringBuilder(passwd)
        .reverse().toString();
  }
  @UseCase(id = 49, description = "New passwords can't equal previously used ones")
  public boolean checkForNewPassword(
      List<String> prevPasswords, String passwd) {
    return !prevPasswords.contains(passwd);
  }
}

對以上 demo 中的代碼進行測試

package cn.haidnor.test;

import cn.haidnor.annotation.UseCase;
import cn.haidnor.clazz.PasswordUtils;
import java.util.*;
import java.util.function.Consumer;
import java.util.stream.*;
import java.lang.reflect.*;

public class UseCaseTracker {

  public static void main(String[] args) {
    List<Integer> useCases = IntStream.range(44, 51)
        .boxed().collect(Collectors.toList());
    trackUseCases(useCases, PasswordUtils.class);
  }

  public static void trackUseCases(List<Integer> useCasesList, Class<?> clazz) {
    // getDeclaredMethods() 獲取所有公開的方法
    for(Method m : clazz.getDeclaredMethods()) {
      // getAnnotation() 獲取指定注解
      UseCase uc = m.getAnnotation(UseCase.class);
      if(uc != null) {
        System.out.print("Found Use Case ");
        // 提取注解元素值
        System.out.println(uc.id());
        // 提取注解元素值
        System.out.println('\t' + uc.description());
        useCasesList.remove( Integer.valueOf( uc.id() ) );
      }
    }

    // 迭代集合
    useCasesList.forEach(new Consumer<Integer>() {
      @Override
      public void accept(Integer integer) {
        System.out.println("Missing use case " + integer);
      }
    });
    // 以上代碼可以使用箭頭行數簡寫
    // useCasesList.forEach(i -> System.out.println("Missing use case " + i));
  }
}

控制臺輸出結果

Found Use Case 47
  Passwords must contain at least one numeric
Found Use Case 48
  no description
Found Use Case 49
  New passwords can't equal previously used ones
Missing use case 44
Missing use case 45
Missing use case 46
Missing use case 50

元注解

Java 語言中目前有 5 種標準注解(前面介紹過),以及 5 種元注解。元注解用于注解其他的注解

注解中可以使用的元素

所有基本類型(int、float、boolean等)

  • String
  • Class
  • enum
  • Annotation
  • 以上類型的數組

其他類型,編譯器就會報錯。注意,也不允許使用任何包裝類型

  • 注解的默認值

無論是在源代碼聲明時還是在注解接口中定義默認值時,都不能使用 null 作為其值。

import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SimulatingNull {
  int id() default -1;
  String description() default "";
}

使用反射獲取注解的方法流程圖

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 淺談JSONObject的使用及示例代碼(JSON解析)

    淺談JSONObject的使用及示例代碼(JSON解析)

    這篇文章主要介紹了淺談JSONObject的使用及示例代碼(JSON解析),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • SpringBoot-Maven打包壓縮瘦身方式

    SpringBoot-Maven打包壓縮瘦身方式

    這篇文章主要介紹了SpringBoot-Maven打包壓縮瘦身方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • springcloud初體驗(真香)

    springcloud初體驗(真香)

    這篇文章主要介紹了springcloud初體驗(真香),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 通過實例解析spring bean之間的關系

    通過實例解析spring bean之間的關系

    這篇文章主要介紹了通過實例解析spring bean之間的關系,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Maven發(fā)布項目到Nexus私有服務器

    Maven發(fā)布項目到Nexus私有服務器

    本文主要介紹了Maven發(fā)布項目到Nexus私有服務器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • SpringSecurity實現自定義登錄接口的詳細過程

    SpringSecurity實現自定義登錄接口的詳細過程

    本文詳細介紹了如何使用SpringSecurity實現自定義登錄接口,文章還涉及了對用戶實體類的增強以滿足詳細信息的需求,適合需要深入了解和實現SpringSecurity自定義登錄功能的開發(fā)者,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • 如何獲取Maven項目的版本號

    如何獲取Maven項目的版本號

    最近需要在項目中獲取項目的版本號,最笨的方法莫過于硬編碼一個版本號,當然之前我也是這么干的。不過閑下來的時候突發(fā)奇想Spring Boot項目中pom.xml定義的版本號(也就是project.version的值)能不能通過API獲得呢?于是利用摸魚的時間研究了這種無聊透頂的東西。
    2021-05-05
  • 全面了解JAVA_BaseDAO數據處理類

    全面了解JAVA_BaseDAO數據處理類

    下面小編就為大家?guī)硪黄媪私釰AVA_BaseDAO數據處理類。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 深入理解Spring MVC的數據轉換

    深入理解Spring MVC的數據轉換

    這篇文章主要給大家介紹了關于Spring MVC數據轉換的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起看看吧。
    2017-09-09
  • 一文簡單了解C#?中的DataSet類

    一文簡單了解C#?中的DataSet類

    這篇文章主要介紹了一文簡單了解C#?中的DataSet類,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08

最新評論

抚顺县| 分宜县| 乌鲁木齐县| 舞钢市| 武功县| 普格县| 莱芜市| 云林县| 云南省| 徐汇区| 高清| 阜南县| 九寨沟县| 当涂县| 昌宁县| 交城县| 讷河市| 喜德县| 靖远县| 木里| 宁安市| 温州市| 牡丹江市| 教育| 永吉县| 北辰区| 孝义市| 如皋市| 翁牛特旗| 隆回县| 诸城市| 汝州市| 长岛县| 海门市| 紫云| 杭锦后旗| 乐安县| 枣阳市| 天长市| 文水县| 瑞丽市|