依據註解類型定義的屬性數量與預設值,使用語法分三類:
public @interface MarkerAnnotation { }
// 使用:僅標記存在與否
@MarkerAnnotation
public class MyClass { }
內建範例:@Override、@Deprecated、@FunctionalInterface (Java 8+)。
value)
public @interface SingleValueAnnotation {
String value(); // 單一屬性慣命名為 value
}
// 使用:括號內直接給值,屬性名可省略
@SingleValueAnnotation("some value")
public class MyClass { }
內建範例:@SuppressWarnings("unchecked")。
public @interface MultiValueAnnotation {
String key1();
int key2();
boolean key3() default true;
}
// 使用:必須指定屬性名=值,逗號分隔
@MultiValueAnnotation(
key1 = "value1",
key2 = 42,
key3 = false
)
public class MyClass { }
| 註解 | 套件 | 用途 | 關鍵行為 |
|---|---|---|---|
@Override | java.lang | 標示方法覆寫父類別方法 | 若父類無對應方法 → 編譯錯誤 |
@Deprecated | java.lang | 標示不建議使用 | 編譯器警告、Javadoc 標記、IDE 划線 |
@SuppressWarnings | java.lang | 抑制特定編譯器警告 | 參數如 unchecked、deprecation、rawtypes |
public abstract class BaseClass {
public final void doWork() { // 模板方法
doPartI();
doPartII();
}
protected abstract void doPartI();
protected void doPartII() { } // 預設實作,子類可選擇性覆寫
}
public class SubClass extends BaseClass {
protected void doPartI() { /* ... */ }
@Override
protected void doPortII() { // 手誤拼寫:Port vs Part
System.out.println("override the method of superclass");
}
}
無 @Override 後果:doPortII() 被視為新方法,父類 doPartII() 預設實作繼續執行,邏輯錯誤隱匿極難發現。
有 @Override 保護:編譯器報錯 "method does not override or implement a method from a supertype",即時暴露拼寫錯誤。

Preferences → Java → Compiler → Errors/Warnings → Annotations → Missing @Override 設為 Error。
// 壓制單一警告
@SuppressWarnings("unchecked")
public List getList() { return (List) rawList; }
// 壓制多重警告
@SuppressWarnings({"unchecked", "rawtypes", "deprecation"})
public void legacyMethod() { ... }
常用警告鍵:unchecked(泛型未檢查轉型)、rawtypes(使用原始型別)、deprecation(使用過時 API)、serial(缺少 serialVersionUID)、finally(finally 區塊不返回)。
Ctrl+1 → Add @Override。Ctrl+1 → Add @SuppressWarnings 自動推斷警告類型。@O → 列出 @Override、@Override 等。@Override 方法同步報錯/重命名。掌握標記/單值/完整值三種註解語法,善用 @Override 消除覆寫拼寫錯誤、@Deprecated 傳遞遷移訊號、@SuppressWarnings 精準壓制雜訊,是寫出可維護、自文件化、工具友善 Java 代碼的基礎素養。Eclipse 3.1 以即時檢查、快速修復、重構同步,將這些最佳實踐內化為開發流程的自動化防呆。