Java学习笔记——Annotation
Annotation就是注释的意思,tiger用它来加强Java源文件本身的表达能力,在EJB3.0中作用非常大。
Annotation有三类,一类是标准的Annotation,而且号称“即拆即用”(out of the box),也就是直接可以用,是包含在java.lang中的系统自带的。第二类是自己定义的annotation,第三类则是meta annotation(元注释)。使用annotation时,前面要加“@”
(一)第一类annotation。有三个,分别是override,deprecated和SupressWarning。前两个功能和javadoc中是一样的,为了注明某个方法或者字段是否为重载的或者废弃的。而第三个则是用来控制编译选项的,叫做“抑制警告”,别看名字怪怪的,其实很简单,比如:
@SupressWarning(value={"uncheck"})
具体语法我不罗嗦,上面这行类似于在用javac编译时,加上了-uncheck选项,但是又不尽相同,因为这个注释只作用于他所注释的方法或者类,而不是javac那样对整个源文件起作用。所以说,SupressWarning是个缩小版。
(二)自己定义annotation。annotation的定义采用interface的形式(隐含的表示annotation其实是一个特殊的接口)
public @interface EXAMPLE{
String value()
}
以接口的形式定义annotation的名字,以方法的形式定义annotation的member(member好像是类里面的公有字段,或者称为annotation的属性,属性可以是一个也可以多个),用的时候如下
@EXAMPLE("happy time")
public void testmethod(){}
把happy time作为“value”这个member的值。
还有比较复杂的用法,比如在EXAMPLE的里面加上Enum的声明,然后让你的member值只能是Enum中限定的值,等等。
(三)meta annotation。元注释又叫“注释的注释”,顾名思义,是用来定义annotation的一组annotation,用在自定义annotation时。就像所谓的meta data(元信息),即“信息的信息”。元注释有四种,一是target,即这个注释可以被用在哪些地方。二是documented,即这个注释能否出现在生成的javadoc中。三是Retention,决定编译器和JVM如何处理这个注释。四是Inherited,即这个注释能否被继承下去,就是说,当被注释的类继承以后,他的子类还会不会有这个注释。
写个例子:
@Inherited
@Documentd
public @interface EXAMPLE{}
这段代码的意思是:这个EXAMPLE注释要出现在生成的javadoc中,而且当EXAMPLE修饰一个类时,它的子类同样会得到EXAMPLE,也就是“继承”的意思了。
只是很简单的说了一下Annotation的功能,细节方面远不止如此,懒得打字了,到此为止
Annotation就是注释的意思,tiger用它来加强Java源文件本身的表达能力,在EJB3.0中作用非常大。
Annotation有三类,一类是标准的Annotation,而且号称“即拆即用”(out of the box),也就是直接可以用,是包含在java.lang中的系统自带的。第二类是自己定义的annotation,第三类则是meta annotation(元注释)。使用annotation时,前面要加“@”
(一)第一类annotation。有三个,分别是override,deprecated和SupressWarning。前两个功能和javadoc中是一样的,为了注明某个方法或者字段是否为重载的或者废弃的。而第三个则是用来控制编译选项的,叫做“抑制警告”,别看名字怪怪的,其实很简单,比如:
@SupressWarning(value={"uncheck"})
具体语法我不罗嗦,上面这行类似于在用javac编译时,加上了-uncheck选项,但是又不尽相同,因为这个注释只作用于他所注释的方法或者类,而不是javac那样对整个源文件起作用。所以说,SupressWarning是个缩小版。
(二)自己定义annotation。annotation的定义采用interface的形式(隐含的表示annotation其实是一个特殊的接口)
public @interface EXAMPLE{
String value()
}
以接口的形式定义annotation的名字,以方法的形式定义annotation的member(member好像是类里面的公有字段,或者称为annotation的属性,属性可以是一个也可以多个),用的时候如下
@EXAMPLE("happy time")
public void testmethod(){}
把happy time作为“value”这个member的值。
还有比较复杂的用法,比如在EXAMPLE的里面加上Enum的声明,然后让你的member值只能是Enum中限定的值,等等。
(三)meta annotation。元注释又叫“注释的注释”,顾名思义,是用来定义annotation的一组annotation,用在自定义annotation时。就像所谓的meta data(元信息),即“信息的信息”。元注释有四种,一是target,即这个注释可以被用在哪些地方。二是documented,即这个注释能否出现在生成的javadoc中。三是Retention,决定编译器和JVM如何处理这个注释。四是Inherited,即这个注释能否被继承下去,就是说,当被注释的类继承以后,他的子类还会不会有这个注释。
写个例子:
@Inherited
@Documentd
public @interface EXAMPLE{}
这段代码的意思是:这个EXAMPLE注释要出现在生成的javadoc中,而且当EXAMPLE修饰一个类时,它的子类同样会得到EXAMPLE,也就是“继承”的意思了。
只是很简单的说了一下Annotation的功能,细节方面远不止如此,懒得打字了,到此为止