基本注解:
@Override:覆蓋超類方法
@Deprecated:一般作為過時(shí)方法標(biāo)記
@SuppressWarnings:關(guān)閉不當(dāng)?shù)木幾g器警告
@SuppressWarnings(value={"deprecation"})可指定的值
deprecation -- 使用了不贊成使用的類或方法時(shí)的警告
unchecked -- 執(zhí)行了未檢查的轉(zhuǎn)換時(shí)的警告拷获,例如當(dāng)使用集合時(shí)沒有用泛型 (Generics) 來指定集合保存的類型片仿。
fallthrough -- 當(dāng) Switch 程序塊直接通往下一種情況而沒有 Break 時(shí)的警告统锤。
path -- 在類路徑配猫、源文件路徑等中有不存在的路徑時(shí)的警告幅恋。
serial -- 當(dāng)在可序列化的類上缺少 serialVersionUID 定義時(shí)的警告。
finally -- 任何 finally 子句不能正常完成時(shí)的警告泵肄。
all -- 關(guān)于以上所有情況的警告捆交。
元注解:
@Target:注解用于什么地方,ElementType可聲明
TYPE:類腐巢、接口(包括注釋類型)或枚舉聲明
FIELD:字段聲明(包括枚舉常量)
METHOD:方法聲明
PARAMETER:參數(shù)聲明
CONSTRUCTOR:構(gòu)造方法聲明
LOCAL_VARIABLE:局部變量聲明
ANNOTATION_TYPE:注釋類型聲明
PACKAGE :包聲明
@Retention:表示需要在什么級別保持注解信息品追,RetentionPolicy可聲明
SOURCE:注解將被編譯器丟棄
CLASS:注解在class文件中可用,但會(huì)被VM丟棄
RUNTIME:VM將在運(yùn)行期也保留注解冯丙,可通過反射讀取注解信息
@Documented:標(biāo)記這些注解是否包含在用戶文檔中
@Inherited:標(biāo)記這個(gè)注解是繼承于哪個(gè)注解類
Java7新增:
@SafeVarargs:忽略任何使用參數(shù)為泛型變量的方法或構(gòu)造函數(shù)調(diào)用產(chǎn)生的警告
Java8新增:
@FunctionalInterface:標(biāo)識一個(gè)匿名函數(shù)或函數(shù)式接口
@Repeatable:標(biāo)識某注解可以在同一個(gè)聲明上使用多次
//定義一個(gè)注解示例
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase{
public int id();
public String description()default "no description";
}
//注解使用示例
public class PassWordUtils{
@UseCase(id = 47,description = "you description message"
public boolean method(){
...
}
}
注解處理器:
//定義一個(gè)UseCase注解的處理器并調(diào)用
public void trackUseCase(Class<?> cl){
//通過反射查找@UseCase標(biāo)記
for(Method m:cl.getDeclaredMethods()){
//getAnnotation獲取指定類型注解對象
UseCase uc = m.getAnnotation(UseCase.class);
if(uc !=null){
"Found Use Case "+uc.id+uc.description();
}
}
}
trackUseCase(PassWordUtils.class)
注解元素:
1肉瓦,所有基本類型(int,float,boolean等)
2泞莉,String
3哪雕,Class
4,enum
5鲫趁,Annotation
6斯嚎,以上類型的數(shù)組
默認(rèn)值限制
元素不能有不確定的值,即必須有默認(rèn)值挨厚,要么在使用注解時(shí)提供元素的值堡僻。對于非基本類型的元素不能以null作為值。如需表示null可以自己定義-1或者""作為替代