首页
学习
活动
专区
工具
TVP
发布

一文带你快速切换至Kotlin for Android模式

前言

关于Kotlin的文章,已经构思了很久。一直不知道该怎么写。文档式文章?那不如直接看文档,何必需要我再多“哔哔”呢。思来想后,决定写一篇快速在Android开发中感受Kotlin的其妙的文章。

说实话,最开始搞Kotlin我是拒绝的。为啥?因为完全没有感觉到用它替换Java开发有什么实质性的改变;而且感觉语法很“别扭”!(其实说白了,就是不想学,给自己找借口。哈哈)

但是,后来机缘巧合却感受到了Kotlin的有趣之处。当然这一切的开始,要克服写久了Java的那一种“别扭”(由其是Lambda写的也不多的情况下)。OK,不扯了。文章将从我接触Kotlin时,遇到“别扭”的地方开始展开。

正文

静态方法

第一个让我懵逼的是静态方法。在Kotlin里边被叫做了:伴生对象。这里不扯“花里胡哨”的介绍。直接上代码:

在Java中这么一个简单工具类中的静态方法,Kotlin要怎么写?

匿名内部类

setOnClickListener是我们比较常用的匿名内部类的使用场景:

那么到了Kotlin中又是什么样子了呢?

直接帮我们Lambda化了。如果我们不想Lambda化那应该是什么样子?

也没什么特别的,其实就是Kotlin的语法。因为Kotlin里边声明的变量要写在前面,其类型用:号隔开,写在后面。也就是现在这个样子。不过需要注意的,这里的object代表匿名对象类型。

这里有一个小细节,不知道大兄弟们有没有注意到。在Java中我们new匿名内部类的时候:,是有()的。而在Kotlin中则:没有()。这里也是属于语法细节,加上()表示显示的调用这个类的构造方法。

如果这样的话,那就和new普通的类,没什么区别的(而不是匿名内部类)。借着匿名内部类,我们直接来看一下Kotlin在RxJava中的实战。

Kotlin in RxJava

先看一个很简单的Java用法:

对于Kotlin来说,在Lambda的加持之下,写法变得异常的简洁(当然Java进行Lambda化也很简洁):

如果对Lambda不是很熟悉的大兄弟们,肯定有点懵。那么咱们换成普通的kotlin,,是不是感觉很熟悉?object又出现了,没错这里就是普通的匿名内部类而已。

Kotlin in Adapter

上述的几块代码,我们一起感受了Kotlin在RxJava中的变形。说实话,如果抛出Lambda,真心谈不上什么大的变化。就是语法上的转变。聊过了我们日常开发比重比较大的RxJava,接下来我们再来看一看另一个重头戏Adapter。这里直接上Kotlin代码:

最开始看这个代码的时候,我是有点懵的,感觉不知所措。其实带入Kotlin的语法,非常的好理解。在最开始声明这个class的时候,我们直接在TestAdapter的主构造方法中声明了两个var的变量。这种写法就类似于Java中的:

这也就是为什么我们能在class里边随意调用data和context的原因。

注意var,如果我们在构造方法中声明时不加上var,就可以理解为这个变量是局部变量。只适用于构造方法中。

这中间override的代码应该没什么好说的,我们来看一下最后声明的class ViewHolder。正常来说我们在Java中的ViewHolder都是这个样子:

那为什么到了Kotlin之中,就变成了短短的一行了呢?其实也没有什么神奇的,就是正常语法而已。

这小结开始的时候,我们提到了主构造方法,以及在匿名内部类这个小结中提到加上()表示显示的调用这个类的构造方法。

因此Kotlin的这段代码非常的好理解:

就是把主构造方法中传递的textView,传给RecyclerView.ViewHolder()构造方法中。也就是和我们的Java代码一毛一样的,只是写法不同罢了。

尾声

OK,关于Kotlin在我们Android开发这些别扭的地方就暂时写到这。其实说白了,这些都是最基本的语法问题。这里挑出来的这几个Android的场景,是我在自以为学会语法的时候,觉得别扭的地方。当然别扭的原因还是因为自己对语法并不够理解。所以才有了这篇文章,希望可以给正准备走上Kotlin这条路上的大兄弟们一些帮助吧~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181117G0FGQ200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券