朱涛 · Kotlin 编程第一课
朱涛
Google 认证的 Kotlin、Android 开发者专家,博客“Kotlin Jetpack 实战”作者
6717 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
朱涛 · Kotlin 编程第一课
15
15
1.0x
00:00/00:00
登录|注册

11 | 注解与反射:进阶必备技能

你好,我是朱涛。今天这节课,我们来学习一下 Kotlin 的注解(Annotation)和反射(Reflection)。
注解和反射,是 Kotlin 当中比较难理解的内容了。和前面我们学习的泛型一样,注解与反射都是比较抽象的概念。我们现在已经知道,Kotlin 的泛型,就是在代码架构的层面进行的一种抽象,从而达到代码逻辑尽可能复用的目的。那么,注解与反射,它们存在的意义是什么呢?
答案是:提高代码的灵活性
灵活性,就让注解与反射同样有着举足轻重的地位,借助这两种技术,我们可以做许多有趣的事情。Kotlin 与 Java 领域,有许多著名的开源库,比如大名鼎鼎的Spring BootRetrofitGson等,都会用到这两种技术。
所以,只有深刻理解了注解和反射,我们才可能理解那些著名开源库的设计思路,也才可能读懂这些世界顶级开发者的代码。
当然,课程进行到这里,学习的难度也越来越高了,不过你也不要因此产生畏难的情绪,只要你能多思考、多练习,把对知识点的理解都落实到代码上,那我相信你对 Kotlin 的掌握情况、代码能力甚至架构能力,都会有一个质的飞跃。并且,在课程中我也会尽量用通俗易懂的语言、例子来给你介绍这些陌生的概念知识,让你在学习的过程中可以轻松一些。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kotlin高级技术:注解和反射 Kotlin的注解和反射为代码提供了灵活性和架构能力。通过注解,可以为代码添加额外信息,如@Deprecated注解可以提示错误并提供快速修复选项。文章详细介绍了注解的定义、使用和精确使用目标,以及反射的概念和作用。通过反射,程序可以感知和修改自身状态,以及根据状态调整决策行为。这些技术特点使得注解和反射成为架构设计中重要的语法特性,为业务开发和架构设计提供了更多可能性。 在文章中,通过示例展示了如何使用反射来感知和修改程序的状态,以及根据状态作出不同的决策。通过Kotlin反射的语法,读者可以轻松地获取变量的类型信息,并且可以准确找到对象的所有成员属性,输出它们的名称和值。同时,读者还可以了解如何使用反射来修改对象的属性值,以及根据程序状态作出不同的行为。这些实际案例帮助读者更好地理解了反射的应用场景和实际操作。 总的来说,本文通过介绍注解和反射的概念和应用,为读者提供了深入理解Kotlin高级技术的机会。同时,通过实际示例的讲解,读者可以更好地掌握如何利用注解和反射来提升代码的灵活性和架构能力,为业务开发和架构设计带来更多可能性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《朱涛 · Kotlin 编程第一课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • H.ZWei
    Kotlin反射的性能比Java反射差很多

    作者回复: 是存在一些差异,相信Kotlin以后会继续优化的。

    2022-03-23
    4
  • 神秘嘉Bin
    kotlin的反射看起来更像是根据"面向对象"思想对Kotlin所需的所有属性进行的一种封装

    作者回复: 理解很到位。赞~

    2022-01-27
    4
  • 白乾涛
    @set:Inject 为啥这里要用 set 而不用 enum AnnotationTarget 中定义的枚举值?两者有什么区别? 文稿中说:而除了 set 以外,Kotlin 当中还有其他的使用目标... 这些目标又是哪里定义的?

    作者回复: 其实就在后面哈:file,作用于文件;property,作用于属性;field,作用于字段;get,作用于属性 getter;set,作用于属性 setter;receiver,作用于扩展的接受者参数;param,作用于构造函数参数;setparam,作用于函数参数;delegate,作用于委托字段。 这是Kotlin里面独有的,目的是为了让target更加精确。

    2022-02-19
    2
    1
  • 苍王
    kotlin反射是针对kotlin语法特性重新封装的api,感觉如非必要直接针对kotlin反射直接使用java反射就好了,特别是像android开发这样framework层还是java代码这样,至于性能不清楚有什么差异

    作者回复: 没错,Java反射其实是更接近底层,但Java反射无法访问Kotlin独有的特性,比如“判断一个类是不是数据类”,这一点我们要借助Kotlin反射才能实现。

    2022-02-06
    1
  • 开飞机的老舒克
    希望老师多一些深入的讲解,例如反射的原理,性能方面的影响等。感谢🙏

    作者回复: 原本我也有打算介绍:反射的原理还有性能问题,不过由于涉及到JVM相关的细节,很容易就偏题,毕竟大家都是冲着Kotlin和协程来的,所以也就没有继续深入,如果后面有机会,我会用其他方式,比如博客,直播的形式来介绍一些更深入的JVM知识。

    2022-02-04
    1
  • 魏全运
    kotlin 和java 反射的异同点: 相同点:都是在运行时获取或修改对象的属性或行为,获取类的信息,功能大同小异。 不同点:kotlin中反射操作更加便利。用的不多,也许很多优势还没挖掘出来

    作者回复: 不错。不同点的地方还有待挖掘哈~

    2022-01-21
    1
  • $Kotlin
    老师,注解Deprecated这部分,我看到了注解的定义和用法,还有讲解了元注解,但是没有看到具体的实现逻辑。 比如说message属性怎么能实现编译器提示文案的功能,replaceWith怎么能告知编译器使用哪个替换方法。 是不是说明我们只能使用已经定义好的注解,无法新增自定义的注解?

    作者回复: 注解的更多应用,在12节有提到,你可以去看看。 至于Deprecated,“怎么能实现编译器提示文案的功能,replaceWith怎么能告知编译器”这其实是Kotlin官方实现的。

    2022-02-23
  • 追梦小乐
    老师,看完有两个问题不太理解: 1、 将类 Calculator CalculatorV3 写在同一个文件中,然后在这个文件中main方法中使用Calculator就会提示报错,但是把两个类单独分类出去,在main方法中调用Calculator没发现提示报错,这个是为什么? 2、反射部分的 it.setter.parameters.size == 2, 这里有点不太理解,如果是转成java方法,set方法也就只有一个参数,打印出来看到这两个是 ins tance parameter.... 和 parameter #1 null.......

    作者回复: 问题1:我按照你的步骤试了一下,没有出现问题。你可以尝试从两个方面去排查:一个是导包是否出错,还有就是是否出现重名的冲突。IDE的错误提示其实是很人性化的,大部分情况下都可以根据错误信息来排查的。 问题2:这里不能从Java角度来看,这是Kotlin独有的语法。这其实就是一个知识点,调用setter的时候,第一个参数永远是对象本身。

    2022-02-10
  • 只为你停留
    有没有写的好又详细的注解博客推荐

    作者回复: 注解这部分的内容,其实重在实践,下节课其实就有对应的实战,你可以去看看,在那里,你可以看到注解的实际应用场景。 至于博客什么的其实没太大必要,在真正知道注解是什么以后,能够深刻理解Target、Retention之类的概念就足够了。

    2022-01-27
    2
  • 辉哥
    kotlin的反射性能怎么样,和Java反射相比

    作者回复: 嗯,这也是一个角度。

    2022-01-22
    2
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部