[java]反射机制(Reflection)几种获取方法详解(下)-----注解的六种获取方法

首先要提出几个注解的注意点:

  • 只有定义了@Retention(value=RUNTIME)的Annotation才能在程序运行时被反射机制取得.
  • 定义里@Inherited的注解才能被继承
  • 同一个类/属性/方法上可以有任意个注解
  • 父类的注解能不能被子类继承呢?比较复杂,结论如下:
    <子类可以继承到父类上的注解吗--有结论了>by赵磊
    赵磊老师的技术博客做了比较细致的实验和讲解,链接:https://elf8848.iteye.com/blog/1621392

接下来先给出注解的六种获取方法:

  • getDeclaredAnnotations() 用于获取对象上的所有注解(不包括继承)
  • getDeclaredAnnotation(Class annotationClass) 用于获取对象上的指定注解(包括继承)
  • getAnnotations() 获取对象上的所有注解(包括继承)
  • getAnnotation(Class annotationClass) 获取对象上的指定注解(包括继承)
  • getDeclaredAnnotationsByType(Class annotationClass) 获取与指定注解相关联的所有注解(包括继承)
  • getAnnotationsByType(Class annotationClass) 获取与指定注解相关联的所有注解(包括继承)

所有的Class/Field/Method对象都可以调用上述方法
大家注意到了,注解的获取方法也可以根据有没有Declared分为两批.
与之前的获取方法类似,有Declared的方法意味着不能获取继承的注解,而没有Declared的方法则可以获取继承的注解.

getDeclaredAnnotations() 可以返回一个包含所有Annotation对象的一维数组.

getDeclaredAnnotation(Class annotationClass) 的用法为:
对象.getDeclaredAnnotation(注解名.class)
可以返回一个Annotation的注解对象

getAnnotations() 和 getAnnotation(Class annotationClass) 两个方法的用法和上述相同.

下面的两个个获取注解的方法不常用,这里简单的介绍一下它们的作用:

getDeclaredAnnotationsByType(Class annotationClass) 和 getAnnotationsByType(Class annotationClass) 都是用于返回对象上与指定注解相关联的Annotation对象一维数组,
区别在于带Declared不包含继承的注解,不带Declared包含继承的注解.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值