详解Kotlin中的静态变量与伴生对象的使用(1)

这里可以很方便的看出来,只有Test.ccc 这行代码是 符合我们java世界中使用静态变量的写法形式的

那么下面 Test.Companion 这种奇葩写法 肯定不行 还要get 啥的,一点也不符合 java 的使用习惯

我们可以看看Test这个kotlin 类的反编译结果 先看看是为啥会造成这种情况 然后再想办法解决这个问题

从上图中可以得知 const val 标记的ccc 这个变量 和java 中的 public static final 是完全 相符的

而没有使用const val 标记的field 就比较难受了, 虽然也是静态的 但是你要访问他们 必须通过

Companion 这个静态类 对象的 get set 方法来执行。

这里可以总结一下:

1.Kotlin调用Kotlin代码的情况下, 用不用const 在调用形式上都没有区别,都是 类名.fieldName的 使用方法即可

2.Java调用Kotlin代码的情况下,使用const val 标记的 field 才更加符合 java调用的形式

3.没有使用const标记的 field 在访问的时候 其实是有隐藏的调用开销的。因为毕竟使用了Companion 来做桥接,多使用了一个对象。

没有 const var的写法?


确实是没有的,const var 写法肯定是报错的,只有const val了。 哪有人就问了,那我的静态变量 就不能 是final的,所以我无法使用const val,因为我要改变他的值,这种情况怎么办?

这种情况你只要加上 注解就可以了, 在var filed 加上注解 就等于 const var的效果(这里有歧义 大家自行体会) 在val field 加上注解 就等于 const val的效果

反编译可以自己看看。

java call kotlin的情况 也可以完美使用

一般情况下,我们推荐在companion object 中尽可能多的使用jvm注解,这样不仅调用的时候效率更高(虽然可以忽略不计) 而且不管是java 调用还是kotlin调用 在形式上都更加符合使用习惯

我就想定义一个 Log Tag 或者 Intent Key 怎么这么麻烦!


在android 开发中,我们经常使用 静态变量 来作为log tag 或者intent key 之类的参数。java代码的时候 我们很容易就写成static final,但是在kotlin中 很多人觉得还要定义一个伴生对象这也太麻烦了

有没有更方便的写法? 答案是有的:

把他定义在 class的外部 就可以了

大家如果还想了解更多Android 相关的更多知识点,可以点进我的GitHub项目中:https://github.com/733gh/GH-Android-Review-master自行查看,里面记录了许多的Android 知识点。最后还请大家点点赞支持下!!!

总结

最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获:

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值