Java 包 getAnnotation() 方法



描述

Java 包 getAnnotation(Class<A> annotationClass) 方法如果存在此元素的指定型別的註釋,則返回該元素的註釋,否則返回 null。

宣告

以下是 java.lang.Package.getAnnotation() 方法的宣告

public <A extends Annotation> A getAnnotation(Class<A> annotationClass)

引數

annotationClass − 與註釋型別對應的 Class 物件

返回值

如果此元素上存在指定註釋型別,則此方法返回此元素的註釋,否則返回 null

異常

  • NullPointerException − 如果給定的註釋類為 null

  • IllegalMonitorStateException − 如果當前執行緒不是物件監視器的所有者。

獲取給定型別的註釋示例

以下示例顯示了 getAnnotation() 方法的用法。在此程式中,我們已將一個註釋 Demo 宣告為一個介面,其中包含一個返回字串的方法和另一個返回整數值的方法。在 PackageDemo 類中,我們在一個名為 example() 的方法上應用了該註釋 Demo,並賦予了一些值。在 example() 方法中,我們使用 getClass() 方法檢索了 PackageDemo 類的類。

現在使用 getMethod() 示例,我們檢索了 example 方法例項,然後使用 getAnnotation() 方法,我們將 Demo 類作為引數傳遞以獲取註釋物件。然後使用註釋物件獲取分配給應用的註釋的值。在 main 方法中,呼叫了此 example() 方法並列印結果。

package com.tutorialspoint;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;

// declare a new annotation
@Retention(RetentionPolicy.RUNTIME)
@interface Demo {
   String str();
   int val();
}

public class PackageDemo {

   // set values for the annotation
   @Demo(str = "Demo Annotation", val = 100)
   // a method to call in the main
   public static void example() {
      PackageDemo ob = new PackageDemo();

      try {
         Class c = ob.getClass();

         // get the method example
         Method m = c.getMethod("example");

         // get the annotation for class Demo
         Demo annotation = m.getAnnotation(Demo.class);

         // print the annotation
         System.out.println(annotation.str() + " " + annotation.val());
      } catch (NoSuchMethodException exc) {
         exc.printStackTrace();
      }
   }
   public static void main(String args[]) {
      example();
   }
}

輸出

讓我們編譯並執行以上程式,這將產生以下結果:

Demo Annotation 100

獲取給定型別的註釋時遇到異常的示例

以下示例顯示了 getAnnotation() 方法的用法。在此程式中,我們已將一個註釋 Demo 宣告為一個介面,其中包含一個返回字串的方法和另一個返回整數值的方法。在 PackageDemo 類中,我們在一個名為 example() 的方法上應用了該註釋 Demo,並賦予了一些值。在 example() 方法中,我們使用 getClass() 方法檢索了 PackageDemo 類的類。

現在使用 getMethod() 示例,我們檢索了 example 方法例項,然後使用 getAnnotation() 方法,我們將 null 作為引數傳遞以獲取註釋物件。由於這會導致 NullPointerException,因此當程式執行時,異常處理程式塊會列印錯誤訊息。

package com.tutorialspoint;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;

// declare a new annotation
@Retention(RetentionPolicy.RUNTIME)
@interface Demo {
   String str();
   int val();
}

public class PackageDemo {

   // set values for the annotation
   @Demo(str = "Demo Annotation", val = 100)
   // a method to call in the main
   public static void example() {
      PackageDemo ob = new PackageDemo();

      try {
         Class c = ob.getClass();

         // get the method example
         Method m = c.getMethod("example");

         // get the annotation 
         Demo annotation = m.getAnnotation(null);

         if(annotation != null) {
        	 // print the annotation
        	 System.out.println(annotation.str() + " " + annotation.val());
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   public static void main(String args[]) {
      example();
   }
}

輸出

讓我們編譯並執行以上程式,這將產生以下結果:

java.lang.NullPointerException
	at java.base/java.util.Objects.requireNonNull(Objects.java:233)
	at java.base/java.lang.reflect.Executable.getAnnotation(Executable.java:599)
	at java.base/java.lang.reflect.Method.getAnnotation(Method.java:793)
	at com.tutorialspoint.PackageDemo.example(PackageDemo.java:29)
	at com.tutorialspoint.PackageDemo.main(PackageDemo.java:40)
java_lang_package.htm
廣告

© . All rights reserved.