註解

言字旁發表於2020-12-09

註解

一:註解(Annotation)概述

Java 註解(Annotation)又稱 Java 標註,是 JDK5.0 引入的一種註釋機制。
Java 語言中的類、方法、變數、引數和包等都可以被標註。
框架 = 註解 + 反射 + 設計模式

二:常見的註解示例

使用Annotation時要在其他前面增加@符號,並把該Annotation當成一個修飾符使用。用於修飾它支援的程式元素。

//在編譯時進行格式檢查(JDK內建的三個基本註解)
@Override:限定重寫父類方法,該註解只能用於方法
@Deprecated:用於表示所修飾的元素(類、方法等)已過時。通常是因為所修飾的結構危險或存在更好的選擇。
@SuppressWarnlngs:控制編譯器警告

三:自定義註解

定義新的 Annotation型別使用@interface關鍵字。
自定義註解自動繼承了java.lang.annotation.Annotation介面。
Annotation的成員變數在Annotation定義中以無引數方法的形式來宣告。其方法名和返回值定義了該成員的名字和型別。我們稱為配置引數。型別只能是八種基本資料型別、String型別、Class型別、enum型別、 Annotation型別、以上所有型別的陣列。
可以在定義Annotation的成員變數時為其指定初始值,指定成員變數的初始值可使用default關鍵字。
如果只有一個引數成員,建議使用引數名為value。
如果定義的註解含有配置引數,那麼使用時必須指定引數值,除非它有預設值。格式是“引數名=引數值”,如果只有一個引數成員,且名稱為value,可以省略"value="。
沒有成員定義的Annotation稱為標記,包含成員變數的Annotation稱為後設資料Annotation。
注意:自定義註解必須配上註解的資訊處理流程(使用反射的方式)才有意義。
/**
 * 如何自定義註解?參照 @SuppressWarnings定義。
 *    1.註解宣告為 @interface。
 *    2.內部定義成員:通常使用value表示。
 *    3.可以指定成員的預設值,使用default定義。
 *    4.如果自定義註解沒有成員,表明是一個標識作用。
 *    5.如果註解有成員,在使用註解時,需要指明成員的值,如果有預設值,則不用。
 */
//@interface和介面沒有任何關係,只不過是一個固定的結構
public @interface MyAnnotation {
    String value() default "hello";
}

四:JDK中的元註解

(1)四個基本元註解

作用在其他註解的註解(或者說--元註解):
@Retention - 標識這個註解怎麼儲存,是隻在程式碼中(SOURCE),還是編入class檔案中(CLASS)(預設行為),或者是在執行時可以通過反射訪問(RUNTIME)@Documented - 標記這些註解是否包含在使用者文件中。
@Target - 用於指定被修飾的Annotation能用於修飾哪些程式元素。
@Inherited - 被修飾的Annotation將具有繼承性。
類比:後設資料(對現有資料進行修飾)。
String neme = "hgk";
其中,hgk就是後設資料。

五:利用反射獲取註解資訊

六:JDK 8 中註解的新特性

(1)可重複註解

(2)型別註解

相關文章