java基礎類庫學習Annotation
前言:
jdk5開始,java提供了註解的支援
Annotation:是程式碼裡的特殊標記,這些標記可以在編譯/類載入/執行時被讀取,並執行相應的處理
而基本的註釋程式只在編譯的時處理
Annotation可以修飾什麼?
可以修飾包/類/構造器/方法/成員變數/引數/區域性變數,資訊儲存在name=value中
Annotation到底是什麼?
是一個介面,
public interface Annotation {
boolean equals(Object obj);
int hashCode();
String toString();
Class<? extends Annotation> annotationType();
}
java中的5個基本的Annotation?
@Override
@Deprecated
@Suppress Warnings
@Safa Varargs //java7
@FunctionalInterface //java8
這些都是以類的形式存在的,且都是介面
對應原始碼瞭解下?
@Override限定重寫父類方法
@Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { }
會讓編譯器檢查這個方法,保證父類要包含一個被該方法重寫的方法,@ovveride只能修飾方法
@Deprecated:標示已過時
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE}) public @interface Deprecated { } 其他程式使用已過時的類,方法,介面時,編譯器會發出警告
@Suppress Warnings:抑制編譯器警告
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE}) @Retention(RetentionPolicy.SOURCE) public @interface SuppressWarnings {
String[] value(); }
表示取消顯示指定的編譯器警告@SuppressWarnings(value="unchecked")
@Safa Varargs //java7 抑制堆汙染警告
@Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.CONSTRUCTOR, ElementType.METHOD}) public @interface SafeVarargs {}
用來抑制堆汙染警告,使其取消顯示的警告
@FunctionalInterface //java8 用來指定某個介面必須是函式式介面
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface FunctionalInterface {}
函式式介面:Java8規定,如果一個介面中只有一個抽象方法(可以包含多個預設方法或多個static方法),該介面就是函式式介面
@FunctionalInterface只能修飾介面,告訴編譯器檢查這個介面,保證該介面只有一個抽象方法,否則就會編譯出錯