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 {
// ...
}
自定义注解
反射
反射机制核心类
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类方式