国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Java Annotation注解相關(guān)原理代碼總結(jié)

瀏覽:2日期:2022-08-29 15:17:47

Java.lang 中自帶的注解

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

如何定義注解

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

package cn.haidnor.annotation;import java.lang.annotation.*;@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Test { }

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

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

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

Demo 簡單實(shí)例

定義注解

以下的代碼中。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*dw*')); } @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 中的代碼進(jìn)行測試

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); } }); // 以上代碼可以使用箭頭行數(shù)簡寫 // useCasesList.forEach(i -> System.out.println('Missing use case ' + i)); }}

控制臺輸出結(jié)果

Found Use Case 47 Passwords must contain at least one numericFound Use Case 48 no descriptionFound Use Case 49 New passwords can’t equal previously used onesMissing use case 44Missing use case 45Missing use case 46Missing use case 50

元注解

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

Java Annotation注解相關(guān)原理代碼總結(jié)

注解中可以使用的元素

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

String Class enum Annotation 以上類型的數(shù)組

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

注解的默認(rèn)值

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

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

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

Java Annotation注解相關(guān)原理代碼總結(jié)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 久久er热视频在这里精品 | 欧美日韩一 | 一级成人黄色片 | 特黄特黄aaaa级毛片免费看 | 女高中生被cao到哭视频 | 国产精品欧美一区二区在线看 | 一级毛片私人影院免费 | 久久久久久久久久久久久久久久久久 | 国产在线精品成人一区二区三区 | 亚洲成人自拍 | 日韩专区亚洲综合久久 | 欧美videos极品| 韩国三级大全久久网站 | 亚洲成人第一 | 日本一区深夜影院深a | 国产精品成人免费 | 免费观看三级毛片 | 国产日韩在线播放 | 中文字幕视频网 | 香蕉福利久久福利久久香蕉 | 97国产免费全部免费观看 | 亚洲第一se情网站 | xxxwww黄色| 天天澡天天碰天天狠伊人五月 | 国产20岁美女一级毛片 | 国产三级日本三级美三级 | 亚洲成人福利网站 | 免费人成在线 | 国产免费久久精品久久久 | 欧美成人片在线 | 日韩毛毛片 | 日韩一区二区精品久久高清 | 国产高清av在线播放 | 亚洲成aⅴ人片在线影院八 亚洲成av人片在线观看 | 一本色道久久88亚洲综合 | 亚洲成人网页 | 午夜性激福利免费观看 | 国产综合成人久久大片91 | 日本加勒比在线视频 | 91看片淫黄大片欧美看国产片 | 亚洲欧美日韩综合二区三区 |