Kotlin 屬性具有以下特點(diǎn):
只讀屬性:使用 val
關(guān)鍵字聲明的屬性是只讀的,這意味著一旦被初始化后,它們的值就不能被改變。
val name: String = "Alice"
可變屬性:使用 var
關(guān)鍵字聲明的屬性是可變的,這意味著它們的值可以在程序運(yùn)行過程中被改變。
var age: Int = 25
屬性委托:Kotlin 支持屬性委托,這意味著可以將屬性的讀取和/或設(shè)置操作委托給另一個(gè)對(duì)象。這可以通過在屬性聲明前加上 delegate
關(guān)鍵字來實(shí)現(xiàn)。
class MyClass {
var name: String by delegate()
}
屬性訪問器:Kotlin 允許為屬性提供自定義的訪問器(getter 和 setter),以便在訪問或修改屬性時(shí)執(zhí)行額外的邏輯。
class MyClass {
var _name: String = ""
val name: String
get() = _name
set(value) {
_name = value.trim()
}
}
計(jì)算屬性:Kotlin 支持計(jì)算屬性,這些屬性不需要顯式聲明為 val
或 var
。計(jì)算屬性的值是通過調(diào)用一個(gè)函數(shù)來獲取的,這個(gè)函數(shù)可以包含任何邏輯。
class MyClass {
val fullName: String
get() = "${firstName} ${lastName}"
}
不可變集合:Kotlin 提供了不可變集合類型,如 List
、Set
和 Map
,它們的屬性(如 size
)也是不可變的。要修改這些集合,需要使用可變版本(如 MutableList
)。
val names: List<String> = listOf("Alice", "Bob")
names.size // 不可變的屬性訪問
擴(kuò)展屬性:Kotlin 允許為現(xiàn)有類添加新的屬性,而無需繼承該類或使用其他設(shè)計(jì)模式。這可以通過擴(kuò)展函數(shù)來實(shí)現(xiàn)。
extension String {
val isLong: Boolean
get() = this.length >= 5
}
println("Alice".isLong) // true