5) 成员为注解数组类型的注解
@Reviews({@Review(grade=Review.Grade.EXCELLENT,reviewer="df"),
@Review(grade=Review.Grade.UNSATISFACTORY,reviewer="eg",
comment="This method needs an @Override annotation")})
@Reviews({@Review(grade=Review.Grade.EXCELLENT,reviewer="df"),
@Review(grade=Review.Grade.UNSATISFACTORY,reviewer="eg",
comment="This method needs an @Override annotation")})
@Reviews注解拥有一个@Review注解数组类型的成员,@Review注解类型有三个成员,其中reviewer、comment都是String类型,但comment有默认值,grade是枚举类型的成员。
4. 解析注解
下面是一个解析注解的实例。
public class ParseAnnotation {
public static void main(String[] args) throws Exception{
final Class cls = Class.forName("com.annotation.TestAnnotation");
// 判断是否有指定注解类型的注解
if(cls.isAnnotationPresent(Description.class)) {
// 根据注解类型返回指定类型的注解
Description des = (Description)cls.getAnnotation(Description.class);
System.out.println("注解描述:" + des.value());
}
}
}
输出结果如下:
注解描述:使用注解的实例
前面提到过,注解不会直接影响程序的运行,但是第三方程序或工具可以利用代码中的注解完成特殊的任务,间接控制程序的运行。对于RetentionPolicy.RUNTIME保留期限的注解,我们可以通过反射机制访问类中的注解。
在JDK5.0里,Package、Class、Constructor、Method以及Field等反射对象都新增了访问注解信息的方法: