01-Java注解与反射
2021-08-17 17:29:53 0 举报
AI智能生成
登录查看完整内容
注解与放射的基本使用,基础知识
作者其他创作
大纲/内容
说明:注解的保留级别不同,对注解的使用自然存在不同场景
说明:在编译期能够获取注解与注解声明的类包括类中所有成员信息,一般用于生成额外的辅助类
APT
级别1:源码
说明:在编译出Class后,通过修改Class数据以实现修改代码逻辑目的。对于是否需要修改的区分或者修改为不同逻辑的判断可以使用注解
字节码增强
级别2:字节码
在程序运行期间,通过反射技术动态获取注解与其元素,从而完成不同的逻辑判定
反射
级别3:运行时
注解的应用场景
说明:在Android中我们需要设计接口以供使用者调用时,如出现需要对入参进行类型限定,如限定为资源ID、布局ID等类型参数,将参数类型直接给定int即可。然而,我们可以利用Android为我们提供的语法检查注解,来辅助进行更为直接的参数类型检查与提示。
参数限制为:图片资源ID
Android注解语法检查
.java -> .class 编译
.class -> .java 反编译
类名.class
对象.getClass()
Class.forName(\"全限定名\")
类.getClassLoader.loadClass(\"全限定名\")
子类.class.getSuperClass()
包装类.class
获取类的对象
getName()全限定名
getSimpleName()类名
getPackage()包名
根据类得到类名(全限定名)
getField(\"属性名\")获取公共属性
getName()属性名
getModifiers()修饰符
getType()数据类型
set(对象名属性值) = 对象名.set属性名 属性赋值
get(对象名) = 对象名.get属性名 属性取值
getDeclareField(\"属性名\") 获取属性
setAccessible(true)设置私有属性能访问
getDeclareFields()所有属性
Filed类(属性)
getMethod(方法名,参数数据类型(无参数传null)) 获取公共方法
getDeclareMethod(方法名,参数数据类型(无参数传null)) 获取私有方法
getParameterTypes() 得到放回参数列表
getDeclareMethods() 得到类的所有方法
getReturnType() 得到返回值方法的数据类型
Method(方法)
Class对象.getConstructor() 得到构造方法
Class对象.getConstructors() 得到所有的构造方法
构造方法
知识点
注解
Java高级语言的特性
注解本身没有任何意义,单独的注解就是一种注释,他需要结合其他如反射、插桩等技术才有意义
Java 注解(Annotation)又称 Java 标注,是 JDK1.5 引入的一种注释机制。是元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响
注解的作用或者意义是什么?
ElementType
RetentionPolicy
Deprecated
Decumented
Inherited
Override
Retention
Target
......
Annotation<interface>
注解的定义
说明:在定义注解时,注解类也能够使用其他的注解声明。对注解类型进行注解的注解类,我们称之为 meta-annotation
标记的注解仅保留在源级别中,并被编译器忽略
RetentionPolicy.SOURCE
标记的注解在编译时由编译器保留,但 Java 虚拟机(JVM)会忽略
RetentionPolicy.CLASS
标记的注解由 JVM 保留,因此运行时环境可以使用它
RetentionPolicy.RUNTIME
SOURCE < CLASS < RUNTIME,即CLASS包含了SOURCE,RUNTIME包含SOURCE、CLASS
不同的注解有不同的级别
元注解
getCenericComponenType():void
GenericArrayType<interface>
getActualTypeArguments():voidgetRawType():voidgetOwnerType():void
说明:具体的泛型类型,可以获得元数据中泛型签名类型(泛型真实类型)
ParameterizedType<interface>
getBounds():voidgetCenericDeclaration():voidgetName():void
说明:泛型类型变量。可以泛型上下限等信息
TypeVariable<interface>
getUpperBounds():voidgetLowerBounds():void
说明:通配符泛型,获得上下限信息
WildcardType<iunterface>
Type<interface>
Type
Java的注解与反射V1.0.0
0 条评论
回复 删除
下一页