2.5 KiB
2.5 KiB
深入 Kotlin
预计时间 3d
确保你已经了解所有的基础语法,这很重要。
更全面的 class 用法
更加详细的 class 构造函数与对象初始化
类初始化
在 Kotlin 的类定义中可以写 init {} 代码块,它发生在构造函数之后,作用是使用构造函数定义的成员变量值再做一些构造函数没有的操作,比如利用构造函数的参数再做一些细致的变量处理。
构造函数
构造函数有多种写法:
- 直接写在类名之后
class MyClass(
val a: Int,
private var b: String,
c: Int // 这里的变量 c 仅用于成员初始化,随后被抛弃,不作为成员变量
) {
val d = c * a
// something else
}
class MyClass private constructor( // 非私有时,constructor 可省
// ...
) {
// something else
}
- 写在类定义之内
class MyClass {
val d: Int
constructor(
val a: Int,
private var b: String,
c: Int
) {
d = c * a
}
// something else
}
- 构造函数调用其他构造函数
class MyClass(
var name: String?,
val amount: Int
) {
constructor(
val amount: Int
) : this(null, amount)
// something else
}
伴生对象
定义方法:
companion object {}
它的使用和 object 完全一致,用于替代 Java 中的 static 修饰符。是一个非常方便的东西。
类继承细节
泛型类
特殊类函数
component 函数
重写 toString
重载运算符
委托
特殊函数
嵌套 lambda 与注解
泛型函数
infix 函数
扩展函数
概念与 lambda 变量类型
常用的扩展函数
apply
also
let
let 可以让一段代码只在对象非空时执行:
val name: String? = "Kotlin"
name?.let {
println("长度是 ${it.length}")
}
如果 name 是 null,let 里面的代码不会执行。
use
run
suspend 函数
文件 IO
用 Gradle 加载依赖(外部库)
Kotlin 反射
定义一个特殊的变量/函数名