好程式設計師Java培訓分享註解與反射原理說明

好程式設計師發表於2020-10-21

  好程式設計師Java 培訓分享 註解與反射原理說明 首先註解若想發揮更大作用,還需藉助反射機制之力。透過反射,可以取得一個方法上宣告的註解的全部內容。

   一般有兩種需求:

   1 、取得方法中全部的註解,透過呼叫 getAnnotations 來實現。

   2 、判斷操作是否是指定註解,透過呼叫 getAnnotation 來實現。

   下面從原始碼角度來說明怎樣獲取這些註解資訊。

   原始碼導讀——取得方法中全部的註解

 

public class AccessibleObject implements AnnotatedElement {

  ...

  // 取得全部 Annotation

  public Annotation[] getAnnotations() {

    return getDeclaredAnnotations();

  }  

  ...

}

public final class Method extends Executable {

  ...

  public Annotation[] getDeclaredAnnotations() {

    // 針對 Method 類,需要呼叫父類的 getDeclaredAnnotations 方法

    return super.getDeclaredAnnotations();

  }  

  ...

}

//Method 的父類 Executable getDeclaredAnnotations 實現全部註解資訊的獲取

public abstract class Executable extends AccessibleObject

  implements Member, GenericDeclaration {

  ...

  public Annotation[] getDeclaredAnnotations() {

    return AnnotationParser.toArray(declaredAnnotations());

  }  

  ...

}

 

原始碼導讀——判斷操作是否是指定註解

 

public final class Method extends Executable {

  ...

  //// 取得指定 Annotation

  public <T extends Annotation> T getAnnotation(Class<T> annotationClass) {

    return super.getAnnotation(annotationClass);

  }

  ...

}

public abstract class Executable extends AccessibleObject

  implements Member, GenericDeclaration {

  ...

  public <T extends Annotation> T getAnnotation(Class<T> annotationClass) {

    Objects.requireNonNull(annotationClass);

    // 獲得指定註解類的資訊

    return annotationClass.cast(declaredAnnotations().get(annotationClass));

  }  

  ...

}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2728451/,如需轉載,請註明出處,否則將追究法律責任。

相關文章