Java Annotation,也称为注解,是Java编程语言中的一种元数据,它提供了在代码中附加信息的方式,这些信息可以被编译器、JVM或工具在编译时或运行时处理。注解不会直接影响程序的运行,但可以用于代码分析、验证、优化,或者为自动工具提供指令。
在上述例子中,作者通过一个生动的故事介绍了注解的基本概念。故事中的“败家子”卡可以被视为注解,它标识了持卡人(在代码中对应的方法)的特殊身份,而不需要直接修改主程序的逻辑。在Java中,我们可以通过定义自定义注解来实现类似的功能。
我们定义了一个名为`VIPAnnotation`的注解:
```java
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface VIPAnnotation {
String value();
}
```
这里的`@Retention(RetentionPolicy.RUNTIME)`表示这个注解将在运行时可访问,意味着我们可以在运行时通过反射获取到这个注解的信息。`@Documented`则意味着这个注解会被包含在生成的Javadoc文档中。
接着,我们创建了一个`Concert`类,并在`attend`方法上使用了`VIPAnnotation`注解,赋予了它一个值(在这里是"250"):
```java
public class Concert {
@VIPAnnotation(250)
public void attend() {
System.out.println("观看演出 ......");
}
}
```
我们编写了一个`Main`类来模拟演唱会的主办方,通过反射获取并处理`attend`方法上的`VIPAnnotation`注解:
```java
public class Main {
public static void main(String[] args) throws Exception {
Class<Concert> clazz = Concert.class;
Object object = clazz.newInstance();
Method method = clazz.getMethod("attend", new Class[]{});
// 检查是否带有VIPAnnotation
if (method.isAnnotationPresent(VIPAnnotation.class)) {
// 获取VIPAnnotation
VIPAnnotation vipAnnotation = method.getAnnotation(VIPAnnotation.class);
int sequence = vipAnnotation.value();
// 输出贵宾待遇信息
System.out.println("享受贵宾待遇 ....");
// 这里可以根据sequence值执行不同的贵宾逻辑
}
// 执行方法
method.invoke(object, new Object[]{});
}
}
```
这段代码展示了如何在运行时通过反射检查方法是否被特定的注解标记,以及如何获取和使用注解的值。在实际开发中,注解的用途广泛,如用于框架的配置、代码生成、依赖注入、性能监控等。理解并善用Java Annotation能够使代码更加简洁、易维护,并且可以极大地提高开发效率。