簡單介紹如何通過註解獲取反射的值

明小天666發表於2020-12-12

簡單說明

可以利用反射獲取註解中的值,通過反射可以獲取一個類的Class物件,通過該物件可以獲取註解,獲取到對應的註解後,就可以獲取註解中的值,具體程式碼實現如下:

public class AnnotationDemo {

    public static void main(String[] args) throws NoSuchFieldException {
        // 獲取類的Class物件
        Class clazz = Demo.class;
        // 獲取類上的註解
        CustomerAnnotation classAnnotation =
                (CustomerAnnotation) clazz.getAnnotation(CustomerAnnotation.class);
        // 獲取註解上的值
        String classValue = classAnnotation.value();
        String[] classDesc = classAnnotation.desc();
        System.out.println("類上註解的值 value=" + classValue + 
                " desc=" + Arrays.toString(classDesc));
        // 獲取屬性
        Field field = clazz.getDeclaredField("name");
        // 獲取屬性上的註解
        CustomerAnnotation fieldAnnotation =
                (CustomerAnnotation) field.getAnnotation(CustomerAnnotation.class);
        // 獲取註解上的值
        String fieldValue = fieldAnnotation.value();
        String[] fieldDesc = fieldAnnotation.desc();
        System.out.println("類上註解的值 value=" + fieldValue + 
                " desc=" + Arrays.toString(fieldDesc));
    }

}

@CustomerAnnotation(value = "classValue")
class Demo {

    @CustomerAnnotation(value = "fieldValue",desc = {"desc1","desc2"})
    private String name;
}

@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@interface CustomerAnnotation {
    String value();
    String[] desc() default "defaultValue";
}

注:不理解註解和反射的可以看以下兩篇文章:
1.簡單介紹Java中的註解
2.簡單介紹java中的反射

相關文章