Annotation入门

现在可以在越来越多的程序代码中看到Annotation(中文翻译为“注释”)的影子,在一些工具中也开始使用Annotation来代替XML做一些配置工作,所以有必要了解一Annotation的知识。
先来看看在JDK中对Annotation是怎么描述的。
————————————————————————————————————————
java.lang.annotation
接口 Annotation
public interface Annotation
所有 annotation 类型都要扩展的公共接口。注意,手动扩展该公共接口的接口不 定义 annotation 类型。还要注意此接口本身不定义 annotation 类型。
————————————————————————————————————————
由上面的文字,我们首先要获取的一个信息是,Annotation是Java API中的一个接口。这个接口具体怎么用,和普通的接口有什么不一样,我们会在后面结合例子来说明。
Annotation用来提供一些和程序有关的信息,但annotation本身并不是程序语意的一个组成部分。举个例子来说,我们的程序中通过会在开头包含代码作者的一些信息:

public class Generation3List extends Generation2List {
// Author: John Doe
// Date: 3/17/2002
// Current revision: 6
// Last modified: 4/12/2004
// By: Jane Doe
// Reviewers: Alice, Bill, Cindy

// class code goes here
}

如果要更换为使用annotation的方式说明这些信息的话,首先需要定义一个annotation类,语法如下:

@interface ClassPreamble {
String author();
String date();
int currentRevision() default 1;
String lastModified() default "N/A";
String lastModifiedBy() default "N/A";
String[] reviewers(); // Note use of array
}

由上面的语法可以看到,annotation类的定义和接口的定义类似,只是需要在interface关键字之前加上@符号。Annotation类的元素的定义看上去有点像方法的声明,另外可以提供默认值给这些元素。
一旦定义了annotation类型之后,就可以使用它了,并且将实际的值填入annotation的元素中:

@ClassPreamble (
author = "John Doe",
date = "3/17/2002",
currentRevision = 6,
lastModified = "4/12/2004",
lastModifiedBy = "Jane Doe"
reviewers = {"Alice", "Bob", "Cindy"} // Note array notation
)

public class Generation3List extends Generation2List {
// class code goes here
}

借助上面的这个例子,我们大体知道了annotation是怎么回事了。
Annotation的使用大概可以分为三种类型:
1、作为信息提供给编译器 Annotation可以被编译器用来侦测错误和禁止警告信息
2、在编译时和运行时获得处理 一些工具软件可以利用annotation提供的信息来生成代码或者XML等等
3、在运行时获得处理 有些annotation可以在运行时被检查
Annotation可以应用在类、方法、变量等程序元素的声明前面。比如应用在类的定义前面:

@Author(
name = "Benjamin Franklin",
date = "3/27/2003"
)
class MyClass() { }

再比如应用在方法的声明前面:

@SuppressWarnings(value = "unchecked")
void myMethod() { }

如果annotation只有一个元素,而且该元素的名字是"value"的话,那么可以简写成:

@SuppressWarnings("unchecked")
void myMethod() { }

如果annotation没有元素的话,那么可以进一步简写成如下所示:

@Override
void mySuperMethod() { }

还可以从另外一个角度对annotation来分类
1、语言规范中预定义的annotation 包括了三个@Deprecated, @Override和@SuppressWarnings
2、用户自定义的各种annotation
1)、被@Deprecated标记的元素,表示该元素是已经过时的,不应该再被使用的。如果用户使用了@Deprecated标记的类、方法时,在编译的时候编译器会给出警告信息。
2)、@Override标记的元素表示是要override该元素在它的父类中的定义。比如,你在程序中重写toString()方法,如果你写成如下形式了,那么在编译时编译器会给出错误提示。(把toString()错写成tostring())

@Override
String tostring() { }

3)、@SuppressWarings用来告诉编译器忽略一些特定的警告信息。下面的例子中,使用了一个已过时的方法正常情况下编译器是会给出警告信息的。如果使用@SuppressWarnings的话,就是告诉编译器不要给出这些警告信息。

// use a deprecated method and tell compiler not to generate a warning
@SuppressWarnings("deprecation")
void useDeprecatedMethod() {
objectOne.deprecatedMethod(); //deprecation warning -suppressed
}

作为初学者,第一步骤是大概了解annotation之后,可以在程序中使用annotation即可,比如在使用Spring2时使用annotation的方式取代XML配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值