JDK 5 引入三大標準註解,均為源碼級(SOURCE 保留策略),供編譯器檢查與 IDE 提示,不進入運行時。
標註方法必須重寫父類/實現接口的方法。拼寫錯誤、參數不匹配、父類無此方法時編譯報錯。
public class OverrideDemo {
@Override
public String toString() {
return super.toString() + " | Override 測試";
}
// @Override
// public void tostring() { } // 編譯錯誤:method does not override...
}
注意:JDK 5 實現接口方法不能加 @Override,JDK 6+ 已放開。
告知調用者:該元素不再推薦使用,可能在未來版本移除。編譯器會對調用處發出警告。
public class LegacyApi {
@Deprecated
public void oldMethod() {
System.out.println("舊方法,請改用 newMethod()");
}
public void newMethod() { /* ... */ }
}
// 調用處
public class Client {
public static void main(String[] args) {
new LegacyApi().oldMethod(); // 編譯警告:oldMethod() is deprecated
}
}
指示編譯器忽略特定警告。常用值:unchecked(泛型未檢查轉換)、deprecation(使用過時 API)、rawtypes(原始類型)。
public class WarningDemo {
// 壓制調用過時方法的警告
@SuppressWarnings("deprecation")
public void useOldApi() {
new LegacyApi().oldMethod(); // 無警告
}
// 壓制多類別警告
@SuppressWarnings({"unchecked", "rawtypes"})
public void rawTypesDemo() {
List list = new ArrayList(); // 無警告
list.add("test");
}
}
四大元註解用於定義註解的生命周期、作用目標、文檔化、繼承性。
| 元註解 | 作用 | 關鍵屬性 |
|---|---|---|
| @Target | 限定註解可用位置 | ElementType.TYPE/FIELD/METHOD/PARAMETER/CONSTRUCTOR/LOCAL_VARIABLE/ANNOTATION_TYPE |
| @Retention | 定義保留階段 | RetentionPolicy.SOURCE/CLASS/RUNTIME |
| @Documented | 標註進 Javadoc | 無 |
| @Inherited | 允許子類繼承 | 僅對 TYPE 有效 |
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ApiInfo {
String author() default "Unknown";
String version() default "1.0";
String description() default "";
}
// 使用
public class MyService {
@ApiInfo(author = "ZhangSan", version = "2.1", description = "用戶查詢")
public User getUser(Long id) { ... }
}
@Override:防呆神器,重寫必加。@Deprecated:演進利器,配合 Javadoc @deprecated 說明替代方案。@SuppressWarnings:最後手段,嚴格限制範圍並說明理由。