注解的解析

通过之前的学习,可以学会自定义一个注解。但是定义之后要怎么使用?

运行时的注解对象

注解本质上是一个接口,所以在运行时,会动态地生成一个实现了这个接口地类,并且将他实例化。

怎么实现接口的方法?

在使用注解时,如果注解有没有默认值的属性,则一定要给属性显式的赋值。所以,使用时,每个注解的属性都有确定的值。动态的实现这些方法时,只需要返回这些值即可

举个例子:

自定义注解:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface TestAnnotation {
    String value();
}

使用注解:

@TestAnnotation(value = "hello")
public class Test {

}

动态生成类似于下面的类:

class TestAnnotationImpl implenments TestAnnotation{
    public String value(){
        return "hello";
    }
}

获取注解对象

因为动态的生成了一个注解的对象,所以,只要“拿到”这个对象,就可以调用这个对象(注解)的方法来获取值。(例如上面调用value()方法就可以获得值)

获取注解对象,需要通过反射。只要拿到注解修饰的部分的反射对象,就可以拿到注解对象。

例如,上面的注解修饰的时Test类,所以通过Test.class对象就可以拿到注解对象。

TestAnnotation annotation = Test.class.getAnnotation(TestAnnotation.class);

除了Class对象,还可以通过Method对象获得修饰方法的注解对象,通过Filed对象获得修饰字段的注解对象。

获取注解的属性值

上面已经说过,拿到的注解对象实现了注解中的方法,只要通过调用注解(接口)中的方法,就可以得到值。

@TestAnnotation(value = "hello")
public class Test {
    public static void main(String[] args) {
        TestAnnotation annotation = Test.class.getAnnotation(TestAnnotation.class);

        System.out.println(annotation.value());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值