Java Annotation

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")

相關文章
相關標籤/搜索