要实现自定义注解,你需要按照以下步骤进行操作:
- 使用
@interface
关键字创建注解。
public @interface MyAnnotation {
// 注解属性
}
- 在注解中添加属性,通过元素名和类型定义,可以设置默认值。
public @interface MyAnnotation {
String value() default "";
int number() default 0;
boolean flag() default false;
}
- (可选)如果你希望限制注解的使用范围,可以使用元注解来标注注解本身。例如,使用
@Target
来指定注解可以应用的目标(类、方法、字段等),使用@Retention
来指定注解在运行时保留。 使用@Target
元注解来指定注解可以应用的目标。可以选择以下目标之一或多个:
ElementType.TYPE
:类、接口、枚举等。ElementType.FIELD
:字段、枚举常量。ElementType.METHOD
:方法。ElementType.PARAMETER
:方法参数。ElementType.CONSTRUCTOR
:构造函数。ElementType.LOCAL_VARIABLE
:局部变量。ElementType.ANNOTATION_TYPE
:注解。ElementType.PACKAGE
:包。
例如,如果你希望注解仅能应用在方法上,可以这样定义注解:
import java.lang.annotation.*;
@Target(ElementType.METHOD)
public @interface MyAnnotation {
// 注解属性
}
使用 @Retention
元注解来指定注解在运行时保留。可以选择以下保留策略之一:
RetentionPolicy.SOURCE
:注解仅保留在源代码级别,编译后不会包含在字节码中。RetentionPolicy.CLASS
:注解保留在字节码中,运行时不可获取(默认值)。RetentionPolicy.RUNTIME
:注解保留在字节码中,运行时可通过反射等机制获取。
例如,如果你希望注解在运行时保留,可以这样定义注解:
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
// 注解属性
}
通过使用元注解,你能够更加精确地控制自定义注解的使用范围和保留策略,以满足实际需求。根据具体情况,你可以灵活选择目标和保留策略,并结合注解处理器来处理注解,实现相应的功能和逻辑。
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
// 注解属性
}
- 在代码中使用自定义注解,可以通过 @MyAnnotation 来引用,并为属性赋值。
@MyAnnotation(value = "测试", number = 123, flag = true)
public class MyClass {
// ...
}