一 点睛
自定义注解允许开发者开发自己的注解,从而实现更加灵活的编程思想。
自定义注解的语法如下:
[public] @interface 自定义注解的名称{
[数据类型 变量名称();]
}
注意点:@interface,必须加@,每个注解的声明,后面都要加()
元注解:定义注解的注解
常用的元注解:@Target @Retention @Documented @Inherited
定义注解时,往往配合元注解来丰富和完善注解的定义。
@Retention:表示在什么级别保存注解信息。
枚举值 | 说明 |
SOURCE | 注解被编译器丢掉。 |
CLASS | 注解在class文件中可用,但会被jVM丢弃。 |
RUNTIME | JVM将在编译、加载和运行期均保留注解,因此可以通过反射机制读取注解信息。 |
默认的编译器认为@Retention指定的是Class
@Target:表示该注解用于什么地方
枚举值 | 说明 |
TYPE | 类,接口(包括注解类型)或enum声明 |
FIELD | 域声明(包括enum实例) |
METHOD | 方法声明 |
PARAMETER | 参数声明 |
CONSTRUCTOR | 构造器声明 |
LOCAL_VARIABLE | 局部变量声明 |
ANNOTATION_TYPE | 注解声明 |
PACKAGE | 包声明 |
二 自定义注解实战
// 定义了一个注解testAnnoation0
@interface testAnnoation0 {
public String name() default "methodname"; // 指定注解的属性name,默认值为字符串methodname
public String unit() default "unit"; // 指定注解属性unit,默认值为字符串unit
}
public class ch11_4 {
public static void main( String[] args ) {
}
@testAnnoation0(name = "电池SOC", unit = "%") // 使用了该注解,并将注解的name设置为电池SOC,unit的值设置为%
public void testAnnoation() {
}
}
三 自定义注解实战——指定注解的作用对象
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
// 指定了注解testAnnoation1用于方法声明。如果用在非方法的元素上,编译不通过
@Target(ElementType.METHOD)
@interface testAnnoation1 {
public String name() default "methodname";
public String unit() default "unit";
}
public class ch11_5 {
public static void main( String[] args ) {
}
@testAnnoation1(name = "电池SOC", unit = "%")
public void testAnnoation() {
}
}
四 自定义注解实战——指定注解的保存级别
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
// 指定注解的保留级别为RUNTIME,这意味着注解在编译、加载、运行期均保留注释信息
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface testAnnoation2 {
public String name() default "methodname";
public String unit() default "unit";
}
public class ch11_6 {
public static void main( String[] args ) {
}
@testAnnoation2(name = "电池SOC", unit = "%")
public void testAnnoation() {
}
}