MST

星途 面试题库

面试题:Java中注解与反射的基础应用

请描述Java中自定义注解的步骤,并举例说明如何通过反射获取使用该注解的类及方法。
16.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

自定义注解步骤:

  1. 定义注解:使用 @interface 关键字定义注解。注解可以包含成员变量(以无参数方法形式定义),这些成员变量可以有默认值。例如:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface MyAnnotation {
    String value() default "";
    int number() default 0;
}
  • @Retention 指明注解的保留策略,RetentionPolicy.RUNTIME 表示运行时保留,这样在运行时可以通过反射获取到注解信息。
  • @Target 指明注解可以应用的目标,如 ElementType.TYPE 表示可以用于类、接口等,ElementType.METHOD 表示可以用于方法。
  1. 使用注解:在类或方法上使用自定义注解。例如:
@MyAnnotation(value = "TestClass", number = 1)
public class MyClass {
    @MyAnnotation(value = "TestMethod", number = 2)
    public void myMethod() {
        // 方法体
    }
}

通过反射获取使用该注解的类及方法:

import java.lang.reflect.Method;

public class AnnotationReflection {
    public static void main(String[] args) {
        // 获取类上的注解
        if (MyClass.class.isAnnotationPresent(MyAnnotation.class)) {
            MyAnnotation classAnnotation = MyClass.class.getAnnotation(MyAnnotation.class);
            System.out.println("类上的注解值: " + classAnnotation.value());
            System.out.println("类上的注解数字: " + classAnnotation.number());
        }

        // 获取方法上的注解
        try {
            Method method = MyClass.class.getMethod("myMethod");
            if (method.isAnnotationPresent(MyAnnotation.class)) {
                MyAnnotation methodAnnotation = method.getAnnotation(MyAnnotation.class);
                System.out.println("方法上的注解值: " + methodAnnotation.value());
                System.out.println("方法上的注解数字: " + methodAnnotation.number());
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}

通过上述反射代码,可以获取到类和方法上使用的自定义注解,并访问注解中的成员变量值。