Kotlin 学习笔记,2020-06-13

先扯个淡:我这个 Kotlin 学习笔记可以说完美地体现了什么叫「三天热度」。去年 11 月写了两篇之后,因为种种原因一断就是半年,然后整个世界都不一样了,XD

上期笔记


Classes

构造函数的设计思路有点不太直观。首先 primary constructor 不能包含代码,唯一作用就是引入构造参数,这些参数可以被成员初始化和 init block 使用。这个实际效果是各个成员变量的初始化和 init block 合在一起构成了 primary constructor 的函数体。然后 secondary constructor 可以随便写逻辑,但最后必须 delegate 到 primary constructor。

我的理解,Kotlin 的设计思路是 primary constructor 只负责给各个成员简单赋值,额外的逻辑必须放到 secondary constructor 里。这个思路本身可圈可点,但是目前这个设计实现看起来有商榷的余地。首先是依然允许 init block ,导致我们依然可以在里面添加任意逻辑,其次是成员变量初始化和 init block 按照定义次序执行,其实等价于 primary constructor 的代码块散落在整个类的定义里,最后的结果,如果我想要彻底理解一个 secondary constructor 的构造逻辑,我需要跟着它的 delegate chain 在各个 secondary constructor 之间跳转,然后再顺序扫描类定义内各个成员的初始化和 init block —— 可以说比现在 Java 书写构造逻辑的方式更难以理解。

不过 primary constructor 直接定义成员的做法我觉得不错,data class 的用法下面可以省去很多废话代码。


Inheritance

这一节没什么值得说的东西,基本都是常规。不过 Kotlin 的类缺省设置是 final 的,不知道测试的时候需要 Mock 一个类的时候会不会经常遇到麻烦,还是它有其他的办法。


Abstract Classes
Companion Objects

Abstract Class 没有值得一说的东西,Companion Object 这里有点语焉不详,不过提到如果需要写一个函数,不需要类的实例就能访问、而且函数实现能访问类内部结构的话,需要用这个。我寻思这不就是 static method 么?然后根据前面完全没有提到 static method ,是说这玩意被这个 companion object 取代了?后面再看吧。

你可能感兴趣的:(Kotlin 学习笔记,2020-06-13)