介绍
注解(Annotation)是 JDK1.5 的新特性,是一种特殊的类,作用类似于注释,相当于是一个标记,可以标记在一个类身上的不同位置,可以修饰不同的成员变量、方法甚至是类。注解在实际开发中用的非常广泛,尤其是现在流行的基于注解式开发。
定义
注解通过 @interface 关键字进行定义。
public @interface DemoAnnotation {
}
它的形式跟接口很类似,不过前面多了一个 @ 符号。上面的代码就创建了一个名字为 DemoAnnotation的注解。
应用
@DemoAnnotation
public class Test {
}
创建一个类 Test,然后在类定义的地方加上 @DemoAnnotation 可以用 DemoAnnotation 注解这个类。
属性
注解的属性即成员变量。注解只有成员变量,没有方法。注解的成员变量在注解的定义中以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DemoAnnotation {
int id();
String msg();
}
上面代码定义了 DemoAnnotation 这个注解中拥有 id 和 msg 两个属性。在使用的时候,应该给它们进行赋值。
赋值的方式是在注解的括号内以 value=”” 形式,多个属性之前用 ,隔开。
@DemoAnnotation(id=3,msg="hi annotation")
public class Test {
}
需要注意的是,在注解中定义属性时它的类型必须是 8 种基本数据类型外加 类、接口、注解及它们的数组。注解中属性可以有默认值,默认值需要用 default 关键值指定。比如:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DemoAnnotation {
public int id() default -1;
public String msg() default "Hi";
}
DemoAnnotation 中:
- id 属性默认值为 -1
- msg 属性默认值为 Hi
它可以这样应用。
@DemoAnnotation()
public class Test {}
因为有默认值,所以无需要再在 @DemoAnnotation 后面的括号里面进行赋值了,这一步可以省略。另外,还有一种情况。如果一个注解内仅仅只有一个名字为 value 的属性时,应用这个注解时可以直接接属性值填写到括号内。
public @interface DemoAnnotation {
String value();
}
上面代码中,DemoAnnotation 这个注解只有 value 这个属性。所以可以这样应用。
@DemoAnnotation("hi")
这和下面的效果是一样的
@DemoAnnotation(value="hi")
最后,还需要注意的一种情况是一个注解没有任何属性。比如
public @interface DemoAnnotation {}
那么在应用这个注解的时候,括号都可以省略。
@DemoAnnotation
public void testMethod(){}
分类
注解可以分为四大类:
网友评论