写在文前
Kotlin现在已经是Android官方推荐的开发语言,而且AS对Kotlin的支持也更加友好,从今天开始让我们拥抱Kotlin吧,首先今天这篇文章我想来简单聊聊Kotlin在Android开发中的优势,看完之后,我相信各位肯定会转战kotlin开发的。
1、值对象和数据类
kotlin新建一个JavaBean很简单:
1 | class Person(val name: String) |
新建一个数据类也很简单,再也不要重写toString(),equals()和hashCode()方法了:
1 | data class Person(val name: String) |
2、空安全
当我们使用Java开发的时候,如果我们不想遇到NullPointerException,我们就需要在每次使用它之前,不停地去判断它是否为null。
而Kotlin是空安全的,我们通过一个安全调用操作符?来明确地指定一个对象是否能为空。
我们可以像这样去写:
1 | // 这里不能通过编译. User对象不能是null |
3、扩展函数和扩展属性
想想我们在开发中有这样一个场景,比如一个TextView显示地址需要省份+地区+县,但是如果是从服务器解析出来的数据并不能保证每个字段都有值,如果其中一个字段为空,得到的结果很可能就是这样的——河北省null南宫市,这肯定不是我们想要的,在Java中,我们一般是这样处理的:
1 | public static String null2Empty(String s) { |
但是每次给Textview设置内容时都要调用一下这个方法实在太麻烦了,有人说还可以用继承,继承谁呢?String显然是不可能的,我们可以继承TextView然后重写setText方法,但是每次在布局中使用的时候都要使用自己的TextView,还不如上一种方法简单。在kotlin我们可以使用扩展属性和扩展函数解决这样的问题:
扩展属性
1 | var TextView.noNullText: String? |
在Kotlin中这样调用:
1 | tv.noNullText = "河北省null南宫市" |
在Java中这样调用
1 | ViewUtilsKt.setNoNullText(tv, "河北省null南宫市"); |
扩展方法
1 | fun String?.toNoNullString(): String?{ |
在Kotlin中这样调用:
1 | tv.text = "河北省null南宫市".toNoNullString() |
在Java中这样调用
1 | tv_amount.setText(ViewUtilsKt.toNoNullString("河北省null南宫市")); |
是不是so easy!
4、单方法接口-lambda表达式
在Java中,每次我们去声明一个点击事件,都不得不去实现一个匿名内部类,而在Kotlin中,可以直接声明我们要做什么。
1 | view.setOnClickListener { toast("Hello world!") } |
5、单例
在Kotlin中,实现一个单例很简单,一个关键字就搞定
1 | object PlainOldSingleton { |
6、告别findViewById
在build.gradle中添加支持
1 | apply plugin: ‘kotlin-android-extensions’ |
这样就可以通过布局文件中的id在代码中调用布局文件中的view了。哈哈,是不是很爽,当然Kotlin的这个插件远不止如此,我们接着往下看。
7、告别实现Parcelable等一堆代码
我们都知道,在Android中,用于网络传输的数据类都要实现Parcelable,随之而来的就是一堆需要重写的方法,当然这些AS都可以帮我们完成,但是一下多了那么多代码,看着也不是很舒服,这个时候,Kotlin就能体现它的价值了,一个注解搞定:
1 |
|
8、委托类
所谓委托模式 ,就是为其他对象提供一种代理以控制对这个对象的访问,在 Java 开发过程中,是继承模式之外的很好的解决问题的方案。
1 | interface Base { |
Derived 的超类型列表中的 by-子句表示 b 将会在 Derived 中内部存储, 并且编译器将生成转发给 b 的所有 Base 的方法。
写在最后
Kotlin开发Android的优势远远不止这些,这篇文章只是大概的了解下Kotlin的优势,笔者也是写写总结,如果读者想了解更多文章中提到的细节,可以参考官网