最近将一个 java 写的 MVP 的 android 项目迁移为 kotlin ,一边迁移一边学习,人类的本性就是喜新厌旧,这一点在程序员身上体现的淋漓尽致,也是我们不断进步的动力源泉,不过作为架构师尽量还是学会限制自己好奇心,新技术、新语言要是跟风,会活活拖垮你的项目的,自己一点感受。
以下为随着项目迁移过程中遇到的 kotlin 与 java 不同。
- 首先let()的定义是这样的,默认当前这个对象作为闭包的it参数,返回值是函数里面最后一行,或者指定return
fun <T, R> T.let(f: (T) -> R): R = f(this)
override fun hideProgress() {
progressDialog?.let { if(it.isShowing) it.cancel() }
}
这里 let 定义代码块中 it 就是对象 progressDialog
- object 声明一个单例的语法很简单,我们使用object关键字替代class关键字就可以声明一个单例对象
object CommonUtil {
}
- data 作为类修饰符,用于数据类,也就是我们数据模型。这是一个轻量级的类,用于数据模型使用。
data class Tutorial{
@SerializedName("name")
private var name:String? = null,
}
- 在 kotlin 中的类型判断也变得简单
if(context is BaseActivity){
}
- 在 kotlin 中的对象类型转换为 as 操作符
val activity = context as BaseActivity?
- var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量(类似 javascript let)。
- val是一个只读变量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被改变。(类似 javascript const)
private var parentActivity:BaseActivity? = null
- 因为被abstract修饰的类默认具有open属性
open class BaseInteractor(): MVPInteractor{
}
- lateinit 延迟加载
protected lateinit var preferenceHelper: PreferenceHelper
protected lateinit var apiHelper: ApiHelper
网友评论