📜  Java中的字段 getAnnotationsByType() 方法及示例

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

Java中的字段 getAnnotationsByType() 方法及示例

Java.lang.reflect.FieldgetAnnotationsByType()方法用于返回与该字段元素关联的注释。这是获取 Field 对象注解的重要方法。如果没有与此 Field 元素关联的注释,则返回空数组。调用者可以修改返回的数组作为方法发送的实际对象的副本;它不会影响返回给其他调用者的数组。

句法:

public  T[] 
  getAnnotationsByType(Class annotationClass)

参数:该方法接受annotationClass ,即注解类型对应的Class对象。

返回:如果与此元素相关联,则此方法返回指定注释类型的所有此元素的注释,否则返回长度为零的数组。

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

下面的程序说明了 getAnnotationsByType() 方法:
方案一:

// Java program to illustrate
// getAnnotationsByType() method
  
import java.lang.annotation.*;
import java.lang.reflect.Field;
import java.util.Arrays;
  
public class GFG {
  
    // initialize field with
    // default value in annotation
    @annotations(32512.21)
    private double realNumbers;
  
    public static void main(String[] args)
        throws NoSuchFieldException
    {
  
        // create Field object
        Field field
            = GFG.class
                  .getDeclaredField("realNumbers");
  
        // apply getAnnotationsByType()
        annotations[] annotations
            = field.getAnnotationsByType(
                annotations.class);
  
        // print results
        System.out.println(
            Arrays
                .toString(annotations));
    }
  
    @Target({ ElementType.FIELD })
    @Retention(RetentionPolicy.RUNTIME)
    private @interface annotations {
        double value() default 99.9;
    }
}
输出:
[@GFG$annotations(value=32512.21)]

方案二:

// Java program to illustrate
// getAnnotationsByType() method
  
import java.lang.annotation.*;
import java.lang.reflect.Field;
import java.util.Arrays;
  
public class GFG {
  
    // initialize field with
    // default value in annotation
    @annotations("ChipherCodes@#!")
    private double string;
  
    public static void main(String[] args)
        throws NoSuchFieldException
    {
  
        // create a Field object
        Field field
            = GFG.class
                  .getDeclaredField("string");
  
        // apply getAnnotationsByType()
        annotations[] annotations
            = field.getAnnotationsByType(
                annotations.class);
  
        // print results
        System.out.println(
            Arrays.toString(
                annotations));
    }
  
    @Target({ ElementType.FIELD })
    @Retention(RetentionPolicy.RUNTIME)
    private @interface annotations {
        String value();
    }
}
输出:
[@GFG$annotations(value=ChipherCodes@#!)]

参考资料: https: Java/lang/reflect/Field.html#getAnnotationsByType-java.lang.Class-