日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java 注解】自定义注解 ( 注解属性定义与赋值 )

發布時間:2025/6/17 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java 注解】自定义注解 ( 注解属性定义与赋值 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、自定義注解格式
  • 二、注解本質分析
  • 三、注解屬性及類型
  • 四、注解屬性類型
  • 五、注解屬性賦值簡化操作





一、自定義注解格式



分析 Java 中自帶的 @Override 注解 , 源碼如下 :

@Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { }

注解分為兩部分 :

① 元注解 ;

② public @interface 注解名稱 ;





二、注解本質分析



按照 public @interface 注解名稱 格式 , 寫出一個注解 , 編譯該注解代碼生成 Annotation.class 字節碼文件 ;

public @interface Annotation { }

使用 javap 命令反編譯Annotation.class 字節碼文件 , 查看該注解的實際代碼 ;

反編譯命令如下 :

javap Annotation.class

輸出內容 :

D:\002_Project\004_Java_Learn\Annotation\out\production\Annotation>javap Annotation.class Compiled from "Annotation.java" public interface Annotation extends java.lang.annotation.Annotation { }


注解的本質是一個 interface 接口 , 注解接口默認繼承了 java.lang.annotation.Annotation 接口 ;

public interface Annotation extends java.lang.annotation.Annotation { }



三、注解屬性及類型



注解的本質是接口 , 接口中可以定義 常量方法 ;

在注解中定義 接口方法 , 就是 注解的屬性 ;

為注解添加屬性 : 接口中的方法都是抽象方法 , 其中 public abstract 可以省略 ;

public @interface Annotation {public abstract String path(); }

注解屬性使用格式 :

@注解名稱(屬性名稱 = 屬性值)

注解屬性使用 : 在相關的代碼上使用

@Annotation(path = "")Student(String name, int age){}



四、注解屬性類型



注解屬性 ( 接口方法 ) 返回值類型要求 :

基本數據類型 : byte , short , int , long , float , double , char , boolean ;

字符串類型 : String ;

枚舉類型 : enum ;

注解類型 ;

以上類型的數組形式 ;

注解屬性返回值必須是以上的類型 , 不能設置其它類型返回值 , 否則會報錯 ;


注解中定義了屬性 , 在使用注解時 , 需要 給 注解屬性 賦值 ;

定義 注解屬性 時 , 可以 使用 default 關鍵字 指定屬性默認值 , 下面代碼中 , 制定 注解屬性 intValue 值類型為 int 整型 , 默認值 88 ;

int intValue() default 88;

如果 注解屬性 指定了默認值 , 在使用注解時 , 可以選擇 不為該屬性賦值 ( 此時使用默認屬性值 ) , 也可以進行賦值 ( 指定一個新的屬性值 ) ;

如果 注解屬性 沒有指定默認值 , 則使用 注解 時 , 必須為其指定一個默認值 , 否則編譯時報錯 ;


數組類型 的 注解屬性 賦值 時 , 使用大括號進行賦值 , 大括號內是數組元素 , 如果只有一個屬性 , 可以省略大括號 ,


注解 聲明示例 :

public @interface Annotation {/*** 字符串類型* @return*/String stringValue();/*** int 基本類型* @return*/int intValue() default 88;/*** 枚舉類型* @return*/Number enumValue();/*** 注解類型* @return*/Annotation2 annotationValue();/*** 字符串數組類型* @return*/String[] stringArrayValue(); }

枚舉類 :

public enum Number {ONE, TWO, THREE }

Annotation2 注解類 :

public @interface Annotation2 { }

注解使用示例 :

/*** 注解生成文檔** @author hsl* @version 0.1* @since 1.5*/ public class Student {/*** 構造函數* @param name 參數一* @param age 參數二*/@Annotation(stringValue = "tom",enumValue = Number.ONE,annotationValue = @Annotation2,stringArrayValue = {"tom", "jerry"})Student(String name, int age){}@SuppressWarnings("all")@Overridepublic String toString() {return super.toString();} }

代碼分析 : 重點關注注解的使用 , 使用注解時 , 需要給 沒有默認值 的 注解屬性 賦值 , 格式為 注解屬性名稱 = 對應類型屬性值 , 如果 注解屬性 有默認值 , 則

@Annotation(stringValue = "tom", enumValue = Number.ONE, stringArrayValue = {"tom", "jerry"})



五、注解屬性賦值簡化操作



如果 注解屬性 名稱是 value , 并且 注解中只有 111 個屬性 , 那么在使用 注解 為 注解屬性 賦值時 , 可以省略注解名稱 , 直接傳入 注解屬性值 ;

示例 : JDK 自帶的 SuppressWarnings 注解 ,

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE}) @Retention(RetentionPolicy.SOURCE) public @interface SuppressWarnings {String[] value(); }

注解使用 : 使用 SuppressWarnings 注解時 , 直接傳入 “all” 參數 , 省略了注解屬性名稱 ;

@SuppressWarnings("all")@Overridepublic String toString() {return super.toString();}

滿足兩個條件 , 才能使用上述簡化方式 ;

總結

以上是生活随笔為你收集整理的【Java 注解】自定义注解 ( 注解属性定义与赋值 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。