Kotlin 学习笔记,2020-06-14

上期笔记


Declaring Properties
Getters and Setters

这一节修正了我之前的一个认知:Kotlin 类的成员缺省是 property ,也就是类似 C# 的属性以 get/set 方法定义的东西,而不是 data field。当然秉承了 Kotlin 一贯的喜欢放语法糖的习惯,你不需要另外定义 data field,Kotlin 直接帮你生成了:

var counter = 0 // Note: the initializer assigns the backing field directly
    set(value) {
        if (value >= 0) field = value
    }

这个例子里面 set 方法引用的 field 就指向自动生成的 data field。Kotlin 管这样自动生成的 data field 叫 Backing Fields。这个设计我倒还是挺喜欢的,算是糖的恰当。


Const

这个 const 偏弱。只能是以一个 String 或者基础类型来构造,只能以基本的表达式来构造,想调用个函数啥是不行的。


Late-Initialized Properties and Variables

…… 知道这帮人没洁癖,不过看到为了「允许一个 non-null 类型成员不在构造函数里初始化而加个关键字」还是觉得不太舒服。然后在未初始化的时候访问抛个异常以及检查是不是初始化要用 .isInitialized 啥的 …… 我说你费劲巴拉给类型系统准备 non-null 类型是干嘛来着?


Delegated Properties

这个内容实际上后面专门有一节来讨论,这里就先跳过了。


Interfaces

短短的一节,内容基本都在预计中,也就接口多重继承需要看一眼。


Visibility Modifiers

也是短短的一节,不过包含两个引起我注意的点:

  1. 话说 Package 之外又引入了 Module 的概念,然后定义得不清不楚。什么叫「一组一起编译的 Kotlin 文件」?文档简单列举了几个象「an IntelliJ IDEA module」这样例子就完了 …… 干脆改成文件级别的访问控制不好么?
  2. 提到了 local variables 之外还有 local functions 和 local classes。倒是不意外,就是看后文怎么继续解释了。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。