一、Annotation的概念
Annotion(注解)是一個接口,程式可以通過反射來擷取指定程式元素的Annotion對象,然後通過Annotion對象來擷取注解裡面的中繼資料。
二、Annotation的作用
(1)生成文檔 : 可以為類、方法等生成特定的java doc。
(2)編譯處理 :在編譯的時候,可以用注解處理器,對其中的源代碼進行處理。
(3)運作控制:可以在運作時标注類、方法等,用反射的方式達到特殊的流程控制等目的。
三、JDK元注解
(1)@Documented
@Documented Annotation的作用生成Javadoc時包含該注解。
(2)@Retention
@Retention Annotation的作用是标注注解的生命周期,取值RetentionPolicy 枚舉。
public enum RetentionPolicy {
//注解生存周期是Java的原檔案,例如 Override
SOURCE,
//注解生存周期是Java的Class檔案。底層開發人員使用,用于根據Class檔案生成其他檔案。
CLASS,
//注解生存周期是Java的運作時。
RUNTIME
}
(3)@Target
@Target Annotation的作用是說明注解的作用對象,取值
public enum ElementType {
//類、注解、枚舉
TYPE,
//字段、枚舉值
FIELD,
//方法
METHOD,
//參數
PARAMETER,
//構造函數
CONSTRUCTOR,
//局部變量
LOCAL_VARIABLE,
//注解
ANNOTATION_TYPE,
//包
PACKAGE,
//類型變量的聲明語句
TYPE_PARAMETER,
//類型的任何語句
TYPE_USE
}
(4)@Inherited
@Inherited Annotation的作用是如果被@Inherited标注的注解,在類上面使用時,子類會自動繼承此注解,否則的話,子類不會繼承此注解。
四、JDK内置注解
(1)@Override
用于修飾此方法覆寫了父類的方法。
**(2)@Deprecated **
用于标記修飾對象已經過時。
(3)@SuppressWarnnings 抑制編譯器警告
名稱 | 說明 |
---|---|
1.deprecation | 使用了不贊成使用的類或方法時的警告 |
2.unchecked | 執行了未檢查的轉換時的警告,例如當使用集合時沒有用泛型 (Generics) 來指定集合儲存的類型 |
3.fallthrough | 當 Switch 程式塊直接通往下一種情況而沒有 Break 時的警告 |
4.path | 在類路徑、源檔案路徑等中有不存在的路徑時的警告 |
5.serial | 當在可序列化的類上缺少 serialVersionUID 定義時的警告 |
6.finally | 何 finally 子句不能正常完成時的警告 |
7.unused | 代碼中的變量或方法沒有被使用産生的警告 |
8.rawtypes | 使用泛型時沒有指定類型的警告 |
9.all | 關于以上所有情況的警告 |
五、自定義Annotation
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//設定是否使用在Javadoc中
@Documented
//設定生命周期
@Retention(RetentionPolicy.RUNTIME)
//設定作用對象
@Target(ElementType.TYPE)
public @interface 注解名稱 {
//根據需要編寫成員方法
}