📜  方法类 | Java中的 getAnnotation() 方法

📅  最后修改于: 2022-05-13 01:54:20.861000             🧑  作者: Mango

方法类 | Java中的 getAnnotation() 方法

Method 类的Java.lang.reflect.Method.getAnnotation(Class< T > annotationClass)方法如果存在这样的注释,则返回作为参数传递的指定类型的 Method 对象的注释,否则返回 null。这是获取 Method 对象注解的重要方法。

句法:

public  T getAnnotation(Class annotationClass)

参数:该方法需要一个强制参数annotationClass ,它是注解类型的Class对象。

返回值:如果此元素上存在指定的注释类型,此方法返回方法的注释,否则返回 null。

异常:如果给定的注解类为空,此方法将抛出NullPointerException

下面的程序说明了 Method 类的 getAnnotation(Class annotationClass) 方法:

示例 1:该程序打印指定注解类型的方法注解,该注解类型作为参数提供给 Method Object 的 getAnnotation(),表示 GFG 类的 getCustomAnnotation() 方法。

在此示例中,使用了单个类,并且类包含两种方法,即主要方法和带注释的方法。

// Program Demonstrate getAnnotation(Class annotationClass) method
// of Method Class.
  
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
  
// create a custom Annotation
@Retention(RetentionPolicy.RUNTIME)
@interface Annotation {
  
    // This annotation has two attributes.
    public String key();
  
    public String value();
}
  
// create the Main Class
public class GFG {
  
    // call Annotation for method and pass values for annotation
    @Annotation(key = "AvengersLeader", value = "CaptainAmerica")
    public static void getCustomAnnotation()
    {
  
        try {
  
            // create class object for class name GFG
            Class c = GFG.class;
  
            // get method name getCustomAnnotation as Method object
            Method[] methods = c.getMethods();
            Method method = null;
            for (Method m : methods) {
                if (m.getName().equals("getCustomAnnotation"))
                    method = m;
            }
  
            // get Annotation of Method object m by passing
            // Annotation class object as parameter
            Annotation anno = method.getAnnotation(Annotation.class);
  
            // print Annotation Details
            System.out.println("Annotation for Method Object"
                               + " having name: " + method.getName());
            System.out.println("Key Attribute of Annotation: "
                               + anno.key());
            System.out.println("Value Attribute of Annotation: "
                               + anno.value());
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
  
    // create main method
    public static void main(String args[])
    {
        getCustomAnnotation();
    }
}
输出:
Annotation for Method Object having name: getCustomAnnotation
Key Attribute of Annotation: AvengersLeader
Value Attribute of Annotation: CaptainAmerica

示例 2:该程序打印指定注解类型的方法注解,该注解类型作为参数提供给 Method Object 的 getAnnotation(),表示 GFG 类的 getCustomAnnotation() 方法。

在这个例子中,使用了两个类。一个类包含创建方法对象并应用 getAnnotation() 方法的 main 方法,另一个类包含带有一些注释的方法。

// Program Demonstrate getAnnotation(Class annotationClass) method
// of Method Class.
  
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
  
public class GFG {
    public static void main(String[] args)
    {
  
        // get array Method objects
        Method[] methods = GFGDemoClass.class.getMethods();
  
        // get Annotation
        SelfCreatedAnnotation annotation = methods[0]
                                               .getAnnotation(
                                                   SelfCreatedAnnotation
                                                       .class);
  
        // Print annotation attribute
        System.out.println("key: " + annotation.key());
        System.out.println("value: " + annotation.value());
    }
}
  
// Another class on which we want to apply the annotation
class GFGDemoClass {
    private String field;
  
    // create annotation
    @SelfCreatedAnnotation(key = "getField",
                           value = "getting field attribute")
    public String
    getField()
    {
        return field;
    }
}
  
// create custom annotation having two values
@Retention(RetentionPolicy.RUNTIME)
@interface SelfCreatedAnnotation {
    public String key();
    public String value();
}
输出:
key: getField
value: getting field attribute

参考: https: Java/lang/reflect/Method.html#getAnnotation-java.lang.Class-