方法类 | 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-