Tip小杂记——java注解探索(一)
程序员文章站
2024-03-13 16:13:09
...
在java的代码中,总是能看见注解的使用,流行的框架,项目中自定义的注解等,注解在java中担当了重要的作用,所以我决定了解学习注解。
注解需要使用@interface来声明,如
public @interface MyHello {
int value() default 0;
}
注解中的方法有几点需要注意的。
- 不能有异常的抛出
- 方法的返回类型是基础类型,字符串,类,枚举和数组
- 方法不能有参数
- 可以给方法分配默认值
注解也分为几种类型,有标记型、单值型和多值型的,接下来分别介绍一下。
- 标记型
public @interface Initable {}
标记型注解中没有方法,只是用来标记被注解的地方,可以根据此注解对被标记处进行相应处理。
- 单值型
public @interface MyHello {
int value() default 0;
}
@MyHello(value = 12)
该注解只有一个值定义。
- 多值型
public @interface MyHello {
int value() default 0;
String name() default "";
}
@MyHello(value = 12, name = "cloneable")
该注解中有多个值的定义。
java本身提供了几个注解,专门用以定义注解。
-
@Target
Target是用来声明注解的类型,也就是可以被使用的地方。Target注解中的值是ElementType枚举,有如下几个值。类型值 表示注解可作用的地方 TYPE 类,接口(包括注解类型)和枚举 FIELD 域(包括枚举常量) METHOD 方法 PARAMETER 参数 CONSTRUCTOR 构造方法 LOCAL_VARIABLE 局部变量 ANNOTATION_TYPE 注解类型 PACKAGE 包
可以只声明注解作用于一个地方,也可以声明注解可作用于多个地方。
@Target(ElementType.FIELD)
public @interface MyHello {
int value() default 0;
String name() default "";
}
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface MyHello {
int value() default 0;
String name() default "";
}
-
@Retention
Retention用于声明注解的被保留的级别,注解中的值是RetentionPolicy枚举,有如下几个值。类型 保留级别 SOURCE 源文件可用,在编译时注解失效 CLASS 在class文件中可用,注解被保留在class文件中,但虚拟机中不可用,是默认级别 RUNTIME 在运行时可用,在编译时和虚拟机运行时都可用
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MyHello {
int value() default 0;
String name() default "";
}
-
@Inherited
表示被注解的类的子类自动被此注解作用。 -
@Document
标记注解被包含在文档中。
上一篇: mac os快速切换多个PHP版本的方法