Java 註解(Annotation)源自「Metadata(中繼資料)」概念,即「描述資料的資料」。自 JDK 5 引入以來,已成為框架設定、程式碼檢查、文件產生的核心機制。本文系統整理註解分類、三大內建註解、四種元註解,並示範自訂註解的完整流程。
@Override@SuppressWarnings("unchecked")@MyAnno(val1="a", val2="b")| 註解 | 適用對象 | 用途 |
|---|---|---|
@Override | 方法 | 編譯期驗證是否正確覆寫父類方法 |
@Deprecated | 方法、類、欄位 | 標記不建議使用,編譯器會發出警告 |
@SuppressWarnings | 類、方法、區塊 | 抑制特定編譯警告,如 unchecked、rawtypes |
@Target:限定註解可標註位置(ElementType.METHOD、TYPE、FIELD 等)@Retention:聲明生命週期
SOURCE:僅原始碼保留,編譯捨棄CLASS:class 檔保留,VM 載入時捨棄(預設)RUNTIME:執行期保留,可透過反射讀取@Documented:納入 Javadoc 產出@Inherited:允許子類別繼承父類別的註解// 1. 簡單標記註解
public @interface InProgress { }
// 2. 帶單一值(慣用 value)
public @interface TODO {
String value();
}
// 3. 完整註解:含預設值、枚舉、多成員
public @interface GroupTODO {
public enum Severity { CRITICAL, IMPORTANT, TRIVIAL, DOCUMENTATION }
Severity severity() default Severity.IMPORTANT;
String item();
String assignedTo();
String dateAssigned();
}
@InProgress
@TODO("完成利息計算邏輯")
public void calculateInterest(float amount, float rate) { }
@GroupTODO(
item = "說明特殊演算法",
assignedTo = "Jon",
dateAssigned = "07/30/2004",
severity = GroupTODO.Severity.DOCUMENTATION
)
public void complexMethod() { }
@Retention(RUNTIME) 可經反射檢視。@Target、@Retention 明確語意與壽命。掌握註解機制,能讓你撰寫更乾淨、可維護性更高的 Java 程式碼,也能深入理解主流框架的運作原理。