视图绑定新姿势:Kotlin-Android-Extensions
在model层级下的build.gradle文件头部加上:
apply plugin: 'kotlin-android-extensions'
在需要调用的Activity里面:
import kotlinx.android.synthetic.main.<布局名>.* 即可导入布局中所有控件属性
接着通过控件的id 直接引用控件对象进行调用即可复制代码
优点:相比之前的findViewById(),和@注解的两种方式,简化了代码的书写。
疑虑:太过封装化的编程语言,会不会导致开发者对底层的原理了解会越来越少呢?
延迟初始化:lateinit var
只能用来修饰成员变量,不能用来修饰局部变量,并且只能用来修饰对象,不能用来修饰基本类型(因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值)。
在之前的文章中也了解了五大内置委托之 Lazy()
虽然两者都可以推迟属性初始化的时间,但是lateinit var只是让编译期忽略对属性未初始化的检查,后续在哪里以及何时初始化还需要开发者自己决定。而by lazy()真正做到了声明的同时也指定了延迟初始化时的行为,在属性被第一次被使用的时候能自动初始化。
一篇别人写的详细介绍延迟初始化的文章:juejin.im/post/5affc3…
Kotlin空指针处理机制 null safety
?或者 obj? = null ?: defaulValue
?:代表对象允许为空,该对象在被调用的时候,不再抛出NullPointException,而是输出null,
但是被?修饰的对象在if判断中,前面必须做手动的非空判断,或者也可以使用?:default 进行默认值的输出,避免编译检测异常。
在Kotlin里面,三元表达式不再是三个参数表达,而是简化成 obj? : defaultValue 两个参数表示即可
!!修饰符
表示当前对象不能为空,如果手动将对象置空,那么编译时一定会报异常
辣么一个对象没有被?修饰,它的后面其实默认跟了!!修饰符
object 与 compation object 的概念
的地方
发大V