DEVLOG 11.29 近期收集的一些问题(一)Kotlin相关
Q1: 如何理解Kotlin中的getter和setter ?
A1: getter和setter我们通常这样使用:
其中field只能在setter中使用,表示当前的字段的值。
具体转换成字节码是这样的:
所以,如果我们给Kotlin中的一个变量定义了get和set方法的话,我们在获取这个变量的内容的时候,在Java层面,回去调用编译器实现的一个getA方法,并且返回结果。
而使用set的时候会去调用setA,虽然实实在在的改变了a的值,但是因为我们写了get,所以还是会返回getA的结果。
对于定义的一个普通的变量a,编译器也会给他定义get和set和Java POJO中我们手写的差不多:

Q2:延迟初始化lateinit var是如何实现的?
A2: 我们通常采用延迟初始化的方式对于一个我们不确定在何时初始化比较方便时的变量进行初始化。如果这个变量没有被初始化,就会抛出异常:
第二个println会抛出异常。
具体的实现是通过在getter中定义检查的语句,如果在获取这个变量的值时为空,抛出异常: