注解的反射

我们用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

你可能感兴趣的:(注解的反射)