我们用Annotation接口来描述 注解这个东西,注解是一种特殊的接口,而接口是一种特殊的类
所以 注解可有抽象方法! 调用这方法的方式就是 : 注解实例.抽象方法( );
public @interface 注解名(){
int value( ) ;
String name( );
}
现在可以明白为什么创建注解的方式是这样了吧!
@interface ,可以看出这样一个特殊的接口,
int value()这就是一个抽象方法,返回值是int类型。那这是怎样用呢?
@VIP(value = 2,name = “sss")
public void show( ){
}
这个value=2是什么鬼,name又是什么 ?
它是在反射的时候用的!下面来说说如何用反射得到注解的信息!
通过反射手段去获取类的元素,必要前提是得到 目标类的字节码
所以 首先要得到 注解所在类的 class 字节码
上面的例子,注解在方法上,那就要再去获取那个方法
得到方法后: VIP v = show.getAnnotation(VIP.class);
如何理解这个方法?
首先,注解贴在方法上,那就是方法里的东西,该由方法去获取,
后面的VIP.class参数,是因为注解是一个接口类,要得到一个类的实例,是利用该类的字节码去反射出
它的实例出来,最后得到一个VIP类型的注解,赋值给 v
得到 注解的实例v 后,就可以去获取 注解上value和name的值了
v.value( ); 就这样就可以获取了一个int 类型 的 2
在使用注解时就把要返回的值写在了后面,后面直接 调用 v.value( ) 这抽象方法就可以得到
int i = v.value( ); i 就是2
同理,String s = v.name( ); s,就是sss