01 2022 档案
摘要:硬关键字:始终解释为关键字,不能用作标识符 as — 用于类型转换 — 为导入指定一个别名 as? 用于安全类型转换 break 终止循环的执行 class 声明一个类 continue 继续最近层循环的下一步 do 开始一个 do/while 循环(后置条件的循环) else 定义一个 if 表达
阅读全文
摘要:1.3.70 中引入了 @RequireOptIn 与 @OptIn 注解以取代先前使用的 @Experimental 与 @UseExperimental;同时 -Xopt-in 编译器选项也取代了 -Xuse-experimental。 Kotlin 标准库提供了一种机制,用于要求并明确同意使用
阅读全文
摘要:通过使用命名得当的函数作为构建器,结合带有接收者的函数字面值,可以在 Kotlin 中创建类型安全、静态类型 的构建器 类型安全的构建器可以创建基于 Kotlin 的适用于采用半声明方式构建复杂层次数据结构领域专用语言(DSL)。 以下是构建器的一些示例应用场景: — 使用 Kotlin 代码生成标
阅读全文
摘要:作用域函数 Kotlin 标准库包含几个函数,它们的唯一目的是在对象的上下文中执行代码块。当对一个对象调用这样的函数 并提供一个 lambda 表达式时,它会形成一个临时作用域。在此作用域中,可以访问该对象而无需其名称。这些 函数称为作用域函数。共有以下五种:let 、run 、with 、appl
阅读全文
摘要:类引用 最基本的反射功能是获取 Kotlin 类的运行时引用。要获取对静态已知的 Kotlin 类的引用,可以使用 类字面值 语法 val c = MyClass::class 请注意,Kotlin 类引用与 Java 类引用不同。要获得 Java 类引用,请在 KClass 实例上使用 .java
阅读全文
摘要:注解声明 注解是将元数据附加到代码的方法。要声明注解,请将 annotation 修饰符放在类的前面 annotation class Fancy 注解的附加属性可以通过用元注解标注注解类来指定 — @Target指定可以用该注解标注的元素的可能的类型(类、函数、属性、表达式等); — @Reten
阅读全文
摘要:异常类 Kotlin 中所有异常类都是 Throwable 类的子孙类。每个异常都有消息、堆栈回溯信息以及可选的原因 使用 throw-表达式来抛出异常 throw Exception("Hi There!") 使用 try-表达式来捕获异常: try { // 一些代码 } catch (e: S
阅读全文
摘要:可空类型与非空类型 Kotlin 的类型系统旨在从我们的代码中消除 NullPointerException 。NPE 的唯一可能的原因可能是: — 显式调用 throw NullPointerException() — 使用了下文描述的 !! 操作符 — 有些数据在初始化时不一致,例如当 — 传递
阅读全文
摘要:Kotlin允许我们为自己的类型提供预定义的一组操作符的实现。这些操作符具有固定的符号表示(如 + 或 *) 和固定的优先级。为实现这样的操作符,我们为相应的类型(即二元操作符左侧的类型和一元操作符的参数类 型)提供了一个固定名字的成员函数或扩展函数。重载操作符的函数需要用 operator 修饰符
阅读全文
摘要:Kotlin 中有两种类型的相等性: — 结构相等(用 equals() 检测); — 引用相等(两个引用指向同一对象)。 结构相等 结构相等由 ==(以及其否定形式 !=)操作判断。按照惯例,像 a == b 这样的表达式会翻译成: a?.equals(b) ?: (b null) 也就是说如果
阅读全文
摘要:This表达式 为了表示当前的 接收者 我们使用 this 表达式: — 在类的成员中,this指的是该类的当前对象。 — 在扩展函数或者带有接收者的函数字面值中,this 表示在点左侧传递的 接收者 参数。 如果 this 没有限定符,它指的是最内层的包含它的作用域。要引用其他作用域中的 this
阅读全文
摘要:is 与 !is 操作符 我们可以在运行时通过使用 is 操作符或其否定形式 !is 来检测对象是否符合给定类型: if (obj is String) { print(obj.length) } if (obj !is String) { // 与 !(obj is String) 相同 prin
阅读全文
摘要:解构声明 有时把一个对象 解构 成很多变量会很方便,例如: val (name, age) = person 这种语法称为 解构声明 。一个解构声明同时创建多个变量。我们已经声明了两个新变量:name 和 age ,并且 可以独立使用它们 println(name) println(age) 一个解
阅读全文