虽然Java 中预先定义的有注解,但还是需要我们自己去添加新的注解,并按照我们自己的方式使用它们。
自定义注解:Java中提供了四种注解(图20-1),专门负责新的注解的创建。
图20-1
语法:@interface
定义Test注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
}
在定义注解的时候,会需要元注解(Java提供的四种注解)如@Target:表示的该注解应用于什么地方(方法、域、类...),@Retention:则表示该注解在哪一个级别可以使用;源代码中(SOURCE)、类文件中(CLASS)、运行时(RUNTIMEE)。<br />** 元素:**<br /> ①同时注解中也可以添加元素用来表示某些值,当分析处理注解的时候,程序或工具可以利用些值,没有元素的注解称为标记注解(如:Test注解),<br /> 在注解中添加元素:
@Target(ElementType.METHOD)
@Retention (RetentionPolicy.RUNTIME)
public @interface UseCase {
int id();
String description() default "no description";
}
②注解元素的类型;注解中元素可用的类型如下:
所有基本类型
String
Class
enum
Annotation
③:注解默认值:对于注解元素来说不能有不确定的值,要么具有默认值,要么在使用时为其提供值。同时,对于飞基本类型的元素,不能以null作为默认值。所以我们只能自己定以一下特殊的值来表示元素不存在
@Target(ElementType.METHOD)
@Retention (RetentionPolicy.RUNTIME)
public @interface UseCase {
int id() default 0;
String description() default "no description";
}
<br />**注解中元素的使用:**<br /> 注解元素的使用为:名-值的形式,同时需要置于注解声明的括号内,如注解中的元素是唯一需要复制的元素,就可以只给出值就可以
@UseCase(id = 47,description = "Passwords must contain")//普通的注解元素使用
@SQLString(30) String firstName;//注解元素快速的使用
注解的关系:注解之间不允许继承,但是我们可以在一个注解中嵌套另一个注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SQLInteger {
String name() default "";
Constraints constraints() default @Constraints;//嵌套了Constraints注解
}
与注解有关的API:
1.getAnnotaion(Annotaion.class),返回指定类型的注解对象,可以用作检查一个类中是否有指定的注解
2.getDeclaredAnnotaion()该方法返回一个域上所以的注解数组。
3.注解也可以使用instanceof来判读是否是指定的类型。