註解

2020-10-14 11:00:31

註解
註解語法

public @interface TestAnnotation {
 }//建立一個名為TestAnnotation的註解

註解的定義

@TestAnnotation //註釋通過 @interface 關鍵字進行定義
public class Test { 
}

原註解
元註解也是一張標籤,但是它是一張特殊的標籤,它的作用和目 的就是給其他普通的標籤進行解釋說明的
元標籤有 :
@Retention
@Documented
@Target
@Inherited
@Repeatable五種

@Retention
應用到一個註解上時,它解釋說明了這個註解的存活時間
取值:

@Retention(RetentionPolicy.SOURCE )//註解只在原始碼階段保留,編譯時丟棄
(RetentionPolicy.CLASS )//註解只保留到.class階段,但jvm載入class時丟棄
@Retention(RetentionPolicy.RUNTIME )//註解不僅保留到class編譯檔案種,jvm載入class仍保留

生命週期:SOURCE<CLASS <RUNTIME

//例子
@Retention(RetentionPolicy.RUNTIME)
 public @interface TestAnnotation { 
 }

@Documente
作用是能夠將註解種的元素包含到javadoc中去
匯出javadoc防止中文亂碼需要加上

-encoding UTF-8 -charset UTF-8

@Targe
是指定註解運用的地方
取值:

@Target(ElementType.ANNOTATION_TYPE)//給一個註解進行注
@Target(ElementType.CONSTRUCTOR )//給構造方法進行註解
@Target(ElementType.FIELD )//給屬性進行註解 
@Target(ElementType.LOCAL_VARIABLE)//給區域性變數進行註解 
@Target(ElementType.METHOD)//給方法進行註解 
@Target(ElementType.PACKAGE )//給一個包進行註解 
@Target(ElementType.PARAMETER )//給一個方法內的引數進行注
@Target(ElementType.TYPE )//給一個型別進行註解,比如類、介面、列舉
//例子
@Target(ElementType.CONSTRUCTOR)
 public @interface TestAnnotation { 
 }

@Inherited
繼承,不是註解繼承,使用了Inherited之後子類繼承父類別的時候,如果子類沒有註解,那麼父類別的註解被繼承

@Repeatable
可重複 Java 1.8 才加進來的

@interface Persons {   
 Person[]  value(); 
 } 
 @Repeatable(Persons.class) 
 @interface Person{    
 String role default ""; 
 } 
 @Person(role="artist")
  @Person(role="coder")
   @Person(role="PM") 
   public class SuperMan{
    }

註解的屬性
註解的屬性也叫做成員變數。註解只有成員變數,沒有方法

Java 預置的註解
@Deprecated 用來標記過時的元素

@Override 提示子類要複寫父類別中被 @Override 修飾的方法

@SuppressWarnings阻止警告的意思
取值:

@SuppressWarnings({"unused"})//不做警告檢查

@SafeVarargs引數安全型別註解
目的是提醒開發者不要用引數做一些不安全的操作,它的存在會阻止編譯器產生 unchecked 這樣的警告。在 Java 1.7 的版本中加入的。