简介
主要会通过安卓实战来讲解kotlin语法和实际应用,本教程设及知识点包括框架模式mvp+mvvm, Databinding(数据绑定框架),Dagger2(依赖注入框架),DeepLink(页面路由框架),Rxjava,RxAndroid(异步操作框架),Retrofit,Okhtttp等,不过本教程重点在kotlin所以这些框架需要了解可自行百度。
针对人群:Android中级以上,kotlin入门
正式开始
都是程序员,直接看代码
/**
* create by bigman
* 知识点: 继承 ,init ,lateinit
*/
class App : Application() {
//因为kotlin中的类定义同时也是构造函数,这个时候是不能进行操作的,
// 所以kotlin增加了一个新的关键字init用来处理类的初始化问题,init模块中的内容可以直接使用构造函数的参数。
init {
instance = this
}
//加入注解,标注这个apiComponent是需要注入的
//lateinit 则用于只能生命周期流程中进行获取或者初始化的变量,比如 Android 的 onCreate()
@Inject lateinit var apiComponent: ApiComponent
override fun onCreate() {
super.onCreate()
//使用组件进行构造,component注射器注入
DaggerApiComponent.builder()
.apiModule(ApiModule())
.appModule(AppModule(this))
.build()
.inject(this)
}
//Companion Object中定义的成员类似于Java中的静态成员,因为Kotlin中没有static成员
companion object {
lateinit var instance: App
}
}
语法点1:kotlin继承
class App : Application() {}
kotlin的继承就是在类名后直接调用父类的构造方法,这里的我的的应用入口对象App继承于父类Application
语法点2:kotlin init函数
//因为kotlin中的类定义同时也是构造函数,这个时候是不能进行操作的,
// 所以kotlin增加了一个新的关键字init用来处理类的初始化问题,init模块中的内容可以直接使用构造函数的参数。
init {
instance = this
}
上面代码注释已经说明,因为kotlin的类在定义的同时调用了主构造函数,这个时候不能进行任何操作,所以增加了一个init方法可以对构造函数传入的一些参数进行一些初始化操作,比如我们这里是把当前对象赋值给了instance变量
语法点3:kotlin lateinit
语法点4:定义常量与变量var,val和变量类型ApiComponent
//加入注解,标注这个apiComponent是需要注入的
//lateinit 则用于只能生命周期流程中进行获取或者初始化的变量,比如 Android 的 onCreate()
@Inject lateinit var apiComponent: ApiComponent
- lateinit可以延迟加载变量,对于非空类型在声明的时候不能赋值的,可以用lateinit修饰,这样可以有效避免空指针,对比学习
!!
这个符号,这个符号表示当变量为空时会强制抛出空指针,这样显然不是我们想见到的,因为用户是不管你空指针的,他们只知道你的程序异常了。 - var用于定义变量,val用于定义常量,代码中apiComponent是一个ApiComponent的变量,
:
这里的冒号和继承区分一下
语法点5:函数声明
override fun onCreate() {
super.onCreate()
}
函数定义使用关键字 fun,参数格式为:参数 : 类型注意:kotlin语句不需要分号结束
语法点6:新建对象
//使用组件进行构造,component注射器注入
DaggerApiComponent.builder()
.apiModule(ApiModule())
.appModule(AppModule(this))
.build()
.inject(this)
kotlin新建对象不需要像java那样调用new,直接调用构造方法就行,比如这里的ApiModule()
和AppModule(this)
语法点7:伴生对象
//Companion Object中定义的成员类似于Java中的静态成员,因为Kotlin中没有static成员
companion object {
lateinit var instance: App
}
Companion Object中定义的成员类似于Java中的静态成员,因为Kotlin中没有static成员,可用来定义一些常量或者工具方法