相信在使用java编程的过程中,大家对于Annotation已经见怪不怪了,常见的有@Override、@Deprecated和一些开源框架(例如spring、hibernate等)中定义的Annotation。
Annotation可以用来修饰类、属性、方法,其不影响程序的运行,通过它来标识代码,能够起到代码分析、编译检查的作用。
下面通过一个例子来实现自定义Annotation的实现:
1、按照格式来定义一个Annotation
@Retention(RetentionPolicy.RUNTIME)//注解在运行时才有效
@Target({ElementType.ANNOTATION_TYPE,ElementType.METHOD})//限制注解的使用范围(用在类和方法的声明)
public @interface MyAnnotation {
public String value() default "test";//定义变量,默认值为test
}
其中@Retention限制了Annotation的保存范围,@Target限制了Annotation的定义位置(如修饰类或者修饰方法等等)。value为定义的Annotation的属性,并设置了默认值,在使用这个Annotation的时候可以传递参数。
2、编写一个类的方法来使用定义的Annotation来修饰
public class Simple {
@MyAnnotation("hello")
public void test(String name){
System.out.println("test my annotation!");
System.out.println("my name:"+name);
}
}
在test方法中使用了自定义的Annotation修饰,并传递参数。
3、编写测试类,通过反射机制来取得Annotation中的内容
public class Test {
public static void main(String[] args) {
try {
Class<?> c=Class.forName("annotation.Simple");
Method m=c.getMethod("test", String.class);//取得test方法
m.invoke(c.newInstance(), "john");
if(m.isAnnotationPresent(MyAnnotation.class)){//判断Annotation的类型
MyAnnotation my=m.getAnnotation(MyAnnotation.class);//得到test方法使用的Annotation
String value=my.value();//得到传递的参数
System.out.println("value="+value);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
通过控制台显示的信息可以发现,自定义Annotation的功能基本实现。
精彩科技工作室