http://www.javashuo.com/article/p-sroqmnzv-ko.htmljava
Annotation就是給代碼打的標籤,工具
元Annotation,定義Annotation自己的一些屬性,經常使用的如下幾種,spa
Retention註解.net
Retention(保留)註解說明,這種類型的註解會被保留到那個階段. 有三個值:
1.RetentionPolicy.SOURCE —— 這種類型的Annotations只在源代碼級別保留,編譯時就會被忽略
2.RetentionPolicy.CLASS —— 這種類型的Annotations編譯時被保留,在class文件中存在,但JVM將會忽略
3.RetentionPolicy.RUNTIME —— 這種類型的Annotations將被JVM保留,因此他們能在運行時被JVM或其餘使用反射機制的代碼所讀取和使用.code
Documented 註解對象
Documented 註解代表這個註解應該被 javadoc工具記錄. blog
Target註解token
@Target說明了Annotation所修飾的對象範圍:接口
1.CONSTRUCTOR:用於描述構造器
2.FIELD:用於描述域
3.LOCAL_VARIABLE:用於描述局部變量
4.METHOD:用於描述方法
5.PACKAGE:用於描述包
6.PARAMETER:用於描述參數
7.TYPE:用於描述類、接口(包括註解類型) 或enum聲明get
爲何要有註解?
註解是介於代碼和註釋之間的存在,
用於將代碼中的對象,進行分類或標識,這樣在編譯或運行時,能夠作對不一樣的分類作不一樣的處理
如何使用?
註解經過 @interface
關鍵字進行定義
public @interface TestAnnotation { }
註解只有成員變量,沒有方法。註解的成員變量在註解的定義中以「無形參的方法」形式來聲明
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
public int id() default -1;
public String msg() default "Hi";
}
使用的時候,
@TestAnnotation(id=3,msg="hello annotation") public class Test { }
或者,用默認值
@TestAnnotation() public class Test { }
若是是runtime的Annotation,
能夠在代碼裏面這樣獲取,
boolean hasAnnotation = Test.class.isAnnotationPresent(TestAnnotation.class);
if ( hasAnnotation ) {
TestAnnotation testAnnotation = Test.class.getAnnotation(TestAnnotation.class);
System.out.println("id:"+testAnnotation.id());
System.out.println("msg:"+testAnnotation.msg());
經常使用註釋
@SuppressWarnings,抑制告警
@SuppressWarnings("unchecked"),強制類型轉換時的告警
@SuppressWarnings("deprecation")