注解与反射学习,文末附kotlin版本的注解反射案例替代(findViewById、OnclickListener、intent自动传参)

注解

元注解有这些:
  • @Retention 注解是用于指定被修饰的注解可以保留多长时间,即制定JVM策略在哪个时间点上删除当前注解。保留策略值有以下三个
策略值 功能描述
SOURCE 注解只在源文件中保留,在编译期间删除。源码级别用于APT技术
CLASS 注解只在编译期间存在于.calss文件中,运行时JVM不可获取注解信息。该策略值也是默认值。注意,在android中,编译后的dex文件获取不到注解信息。字节码级别用于字节码增加技术
RUNTIME 运行时JVM可以获取注解信息,是最长注解持续期。运行时级别用于反射技术
  • @Target注解用来限制注解的使用范围,即指定被修饰的注解能用于哪些程序单元
枚举值 功能描述
Type 可以修饰类,接口,注解或枚举类型
FIELD 可以修饰属性(成员变量),包括枚举常量
METHOD 可以修饰方法
PAPAMETER 可以修饰参数
CONSTRUCTOR 可以修饰构造方法
LOCAL_VARIABLE 可以修饰局部变量
ANNOTATION_TYPE 可以修饰注解类
PACKAGE 可以修饰包
  • @IntDef注解,用于语法检查,编写注解时建议经常使用此注解来进行语法检查

以下三种我们不经常用到,知道大概使用场景即可

  • @Document注解用于将注解包含在javadoc中

  • @Inherited注解用于指明父类注解会被子类继承得到

  • @Repeatable注解用于声明标记的注解为可重复类型注解,可以在同一个地方多次使用

声明注解主要有用到两个元注解,java跟kotlin声明注解的方式有区别。下边看下示例:

Kotlin版本,注意需要在class前边添加annotation,注解默认值需要使用kotlin版本下的类型(AnnotationTarget.TYPE,AnnotationRetention.RUNTIME)

@Target(AnnotationTarget.TYPE)
@Retention(AnnotationRetention.RUNTIME)
annotation class MyClass(val value: String)
//使用
//使用
@Myclass("test")
Class Test{

}

Java版本,注意需要使用@interface,注解默认值需要使用java版本下的类型(ElementType.TYPE,RetentionPolicy.RUNTIME)

@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Myclass {
    String value();
}
//使用
@Myclass("test")
Class Test{

}
创建注解处理器
  1. 创建一个java项目,在java项目中编写我们的注解处理器
  2. 创建的class类继承系统的AbstractProcessor
  3. 根目录创建resources资源文件夹
  4. resources目录下创建META-INF文件夹
  5. META-INF目录创建services文件夹
  6. services创建javax.annotation.processing.Processor文件,注意此文件没有后缀名
  7. 在javax.annotation.processing.Processor文件中声明我们的注解处理,
反射

反射就是可以使用JDK提供的反射API进行反射调用。可以在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。对于任意一个对象,都能够调用它的任意方法和属性,并且能改变它的属性。是java被视为动态语言的关键

java反射机制主要提供了一下功能

  1. 在运行时构造任意一个类的对象
  2. 在运行时获取或者修改任意一个类所具有的成员变量和方法
  3. 在运行时调用任意一个对象的方法(属性)

在这里插入图片描述
根据方法名来进行反射操作

kotlin版本的替代findview

注解

/**
 * 注解代替findViewById
 */
@Target(AnnotationTarget.FIELD)
@Retention(AnnotationRetention.RUNTIME)
annotation class InjectView
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值