欢迎访问宙启技术站
智能推送

Java函数中注解的使用实例

发布时间:2023-06-30 16:49:31

在Java中,注解是一种用于为代码元素(类、方法、字段等)添加元数据的特殊语法结构。它是一个在代码中以@符号开头的语法元素,可以在运行时被读取和使用,以影响代码的行为。

下面是一个使用注解的例子:

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TestMethod {
    String value() default "";
}

class MyClass {
    @TestMethod("first")
    public void method1() {
        System.out.println("This is method1");
    }

    @TestMethod("second")
    public void method2() {
        System.out.println("This is method2");
    }
}

class Example {
    public static void main(String[] args) throws Exception {
        MyClass obj = new MyClass();
        Class<?> cls = obj.getClass();

        for(Method method : cls.getDeclaredMethods()) {
            if(method.isAnnotationPresent(TestMethod.class)) {
                TestMethod annotation = method.getAnnotation(TestMethod.class);
                String value = annotation.value();
                System.out.println("Found method with TestMethod annotation: " + method.getName() + ", value: " + value);
                method.invoke(obj);
            }
        }
    }
}

在上面的例子中,我们使用了一个自定义的注解TestMethod。这个注解可以被添加到方法上。

首先,我们定义了TestMethod注解类型。它使用了java.lang.annotation包中的元注解Retention和Target,来指定注解的保留策略为运行时(RetentionPolicy.RUNTIME),并且指定了注解的目标是方法(ElementType.METHOD)。注解类中定义的属性名为value,同时给它设定了默认值。

然后我们定义了一个MyClass类,其中包含了两个被@TestMethod注解标记的方法method1和method2。

在Example类的main方法中,我们首先创建了MyClass的实例obj,然后通过调用getClass()方法获取到了这个实例对象的运行时类对象。

接下来,我们使用反射机制,通过调用Class类中的getDeclaredMethods()方法,获取了运行时类对象中声明的所有方法。然后在遍历这些方法的过程中,通过isAnnotationPresent()方法判断方法是否被@TestMethod注解标记,如果是,则通过getAnnotation()方法获取到这个注解对象,并取出注解对象中的value属性。最后,我们通过反射调用method.invoke()方法,可以调用obj对象中的该方法。

在本例中的输出结果是:

Found method with TestMethod annotation: method1, value: first
This is method1
Found method with TestMethod annotation: method2, value: second
This is method2

通过这个例子,我们可以看到注解的使用在很多场景中都非常有用,如测试框架、ORM框架等。注解为我们提供了一种捕捉和读取源代码中的元数据的方式,以便我们可以通过程序自动处理这些元数据,从而影响代码的行为。