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
广告