PROPERTY,//表示作用对象是属性 FIELD,//表示作用对象是字段,包括属性的幕后字段 LOCAL_VARIABLE,//表示作用对象是局部变量 VALUE_PARAMETER,//表示作用对象是函数或构造函数的参数 CONSTRUCTOR,//表示作用对象是构造函数,主构造函数或次构造函数 FUNCTION,//表示作用对象是函数,不包括构造函数 PROPERTY_GETTER,//表示作用对象是属性的getter函数 PROPERTY_SETTER,//表示作用对象是属性的setter函数 TYPE,//表示作用对象是一个类型,比如类、接口、枚举 EXPRESSION,//表示作用对象是一个表达式 FILE,//表示作用对象是一个File @SinceKotlin(“1.1”) TYPEALIAS//表示作用对象是一个类型别名 }

一旦注解被限定了@Target那么它只能被应用于限定的目标对象上,为了验证这一说法,我们为ApiDoc限定下目标对象:

@Target(AnnotationTarget.CLASS) annotation class ApiDoc(val value: String)

@ApiDoc(“修饰类”) class Box { @ApiDoc(“修饰字段”) val size = 6

@ApiDoc(“修饰方法”) fun test() {

} }

这样一来ApiDoc注解只能被应用于类上,如果将它应用在方法或字段上则会抛出异常:

This annotation is not applicable to target ‘member property with backing field’ @Retention

@Retention

我们可以理解为保留期,和Java一样Kotlin有三种时期:

源代码时期(SOURCE)编译时期(BINARY)运行时期(RUNTIME)。

@Retention原型

@Target(AnnotationTarget.ANNOTATION_CLASS)//目标对象是注解类 public annotation class Retention(val value: AnnotationRetention = AnnotationRetention.RUNTIME)

Retention接收一个AnnotationRetention类型的参数,该参数有个默认值,默认是保留在运行时期。

AnnotationRetention

@Retention元注解取值主要来源于AnnotationRetention枚举类 public enum class AnnotationRetention { SOURCE,//源代码时期(SOURCE): 注解不会存储在输出class字节码中 BINARY,//编译时期(BINARY): 注解会存储出class字节码中,但是对反射不可见 RUNTIME//运行时期(RUNTIME): 注解会存储出class字节码中,也会对反射可见, 默认是RUNTIME }

注解的使用场景

提供信息给编译器:编译器可以利用注解来处理一些,比如一些警告信息,错误等编译阶段时处理:利用注解信息来生成一些代码,在Kotlin生成代码非常常见,一些内置的注解为了与Java API的互操作性,往往借助注解在编译阶段生成一些额外的代码运行时处理:某些注解可以在程序运行时,通过反射机制获取注解信息来处理一些程序逻辑

案例:自定义注解实现API调用时的请求方法检查

public enum class Method { GET, POST }

@Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.RUNTIME) annotation class HttpMethod(val method: Method)

interface Api { val name: String val version: String get() = “1.0” } @HttpMethod(Method.GET) class ApiGetArticles : Api { override val name: String get() = “/api.articles” } fun fire(api: Api) { val annotations = api.javaClass.annotations val method = annotations.find { it is HttpMethod } as? HttpMethod println(“通过注解得知该接口需要通过:${method?.method} 方式请求”) }

总结

**其实上面说了这么多,钱是永远赚不完的,在这个知识付费的时代,知识技能提升才是是根本!我作为一名8年的高级工程师,知识技能已经学习的差不多。**在看这篇文章的可能有刚刚入门,刚刚开始工作,或者大佬级人物。

像刚刚开始学Android开发小白想要快速提升自己,最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以这里分享一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

这么重要的事情说三遍啦!点赞+点赞+点赞 免费分享所有学习秘籍! 直达领取链接:点击链接免费领取【Android高级架构师】

【Android高级架构师系统学习资料】高级架构师进阶必备——设计思想解读开源框架

第一章、热修复设计 第二章、插件化框架设计 第三章、组件化框架设计 第四章、图片加载框架 第五章、网络访问框架设计 第六章、RXJava 响应式编程框架设计 第七章、IOC 架构设计 第八章、Android 架构组件 Jetpack

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频 如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)

文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频** 如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android) [外链图片转存中…(img-Hnczy56h-1710971343259)]

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: