Java注解与反射-LMLPHP


Java注解与反射

注解

内置注解

@Override

@SuppressWarnings

@FunctionalInterface

@SafeVarargs

@Nullable

@NonNull

@Repeatable

元注解

元注解四大类型

@Target

应用于类
@Target(ElementType.TYPE)
public @interface MyAnnotation {
    // ...
}
应用于方法
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    // ...
}
应用于字段
@Target(ElementType.FIELD)
public @interface MyAnnotation {
    // ...
}
应用于参数
@Target(ElementType.PARAMETER)
public @interface MyAnnotation {
    // ...
}
应用于构造方法
@Target(ElementType.CONSTRUCTOR)
public @interface MyAnnotation {
    // ...
}
应用于局部变量
@Target(ElementType.LOCAL_VARIABLE)
public @interface MyAnnotation {
    // ...
}
应用于注解类型
@Target(ElementType.ANNOTATION_TYPE)
public @interface MyAnnotation {
    // ...
}

@Retention

源码级别可见
@Retention(RetentionPolicy.SOURCE)
public @interface MyAnnotation {
    // ...
}
编译时可见
@Retention(RetentionPolicy.CLASS)
public @interface MyAnnotation {
    // ...
}
运行时可见
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    // ...
}

@Documented

@Documented
public @interface MyAnnotation {
    // ...
}

@Inherited

@Inherited
public @interface MyAnnotation {
    // ...
}

自定义注解

反射

Java注解与反射-LMLPHP

反射机制核心类

import java.lang.reflect.Method;

public class ReflectionExample {
    public static void main(String[] args) throws Exception {
        // 获取类的 Class 对象
        Class<?> clazz = MyClass.class;

        // 获取指定方法名的 Method 对象
        Method method = clazz.getDeclaredMethod("myMethod");

        // 创建类的实例
        Object instance = clazz.getDeclaredConstructor().newInstance();

        // 调用方法
        method.invoke(instance);
    }
}

// 定义一个示例类
class MyClass {
    public void myMethod() {
        System.out.println("Hello, reflection!");
    }
}

获取Class类方式



Java注解与反射-LMLPHP

08-28 13:29