第二部分:面向对象编程与 Kotlin 特性
第 5 章:类与对象
5.3 属性与字段(getter 和 setter)
在 Kotlin 中,属性是类的重要组成部分,用于存储对象的状态。与 Java 不同,Kotlin 的属性默认包含自动生成的 getter 和 setter,同时支持自定义逻辑。
1. 基本语法
Kotlin 中声明属性的语法如下:
class Person {
var name: String = "Alice" // 可变属性(自动生成 getter 和 setter)
val age: Int = 25 // 只读属性(仅生成 getter)
}
var表示可变属性(可读写)。val表示只读属性(仅可读)。
2. 默认的 Getter 和 Setter
Kotlin 会为属性自动生成默认的访问器:
get()返回属性值。set(value)设置属性值(仅限var属性)。
等价于以下显式代码:
class Person {
var name: String = "Alice"
get() = field
set(value) { field = value }
}
field是幕后字段(backing field),表示属性的实际存储值。
3. 自定义 Getter/Setter
可以为属性添加自定义逻辑:
class Rectangle(val width: Int, val height: Int) {
val area: Int
get() = width * height // 计算属性(无幕后字段)
var description: String = "Rectangle"
set(value) {
field = "Modified: $value" // 在赋值时添加前缀
}
}
4. 可见性修饰
可以限制访问器的可见性:
class BankAccount {
var balance: Double = 0.0
private set // 只能在类内部修改
}
5. 延迟初始化属性
对于非空属性,若初始化时机较晚,可使用 lateinit:
class Service {
lateinit var apiClient: ApiClient // 必须在使用前初始化
}
总结
Kotlin 的属性机制通过简化 getter/setter 的声明,减少了样板代码,同时支持灵活的自定义逻辑,是面向对象设计的核心特性之一。
