Java SE5引入了一项新的语言特性Annotation,中文译为注解。
注解的特殊之处在于,它的定义与接口十分类似,比如都同样使用interface关键字,以及注解元素的声明与接口方法声明类似。
注解的定义如下所示:
public @interface ExampleAnnotation{
public String exampleElement();
}
粗略的看去,这好像是一个接口的定义,但仔细一看它与接口又相区别。特别之处在于,在关键字interface之前多了一个符号@。
注解的使用方式则如下所示:
@ExampleAnnotation(exampleElement="Hello,Class")
public class ExampleClass{
@ExampleAnnotation(exampleElement="Hello,Method")
public void exampleMethod(){}
}
从使用方式上看,注解通常置于类型、方法等类的各种组成元素之上,并且在注解名称前同样也有一个符号@。
概括来说,注解与接口的相似之处有以下几点:
1.有相似的语法定义,包括使用interface关键字,都有相似的组成部分;
2.注解和接口都是一种类型,可以用在申明变量的任何地方,但都不能使用new关键字进行实例化。
它们的不同之处在于:
1.在定义中的申明的内容,对接口来说是方法,但对注解来说叫作元素。并且注解在interface关键字前,比接口多了一个符号@。
2.两者的应用场景不同:接口用于描述具体实现类的公共方法,通常被类使用implements关键字声明实现;注解用于为某一类型添加描述信息,其使用方式从语法上看,与public、static等修饰符相同。
3.接口之间可以使用extends关键字进行继承;而注解之间不能使用extends关键字进行继承。
4.接口可以被某一类型通过implements关键字用于实现多重继承;注解不能被用于其它类型进行继承。
因此,注解虽然从定义上看与接口具有极其相似的语法,且都是一种类型。但本质上它们是两种独立的Java语言特性,且都有各自特定的使用场景。