1. 程式人生 > >java基礎類庫學習Annotation

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只能修飾介面,告訴編譯器檢查這個介面,保證該介面只有一個抽象方法,否則就會編譯出錯