數(shù)據(jù)類是一個簡單的類,用于保存數(shù)據(jù)/狀態(tài)并包含標準功能(函數(shù))。
數(shù)據(jù)類聲明
-
data關鍵字用于將類聲明為數(shù)據(jù)類。 - 聲明數(shù)據(jù)類必須至少包含一個帶有屬性參數(shù)(val或var)的主構造函數(shù)。
- 類不能標記為開放,抽象,密封或內部。
- 該類可以擴展(繼承)其他類,它還可以實現(xiàn)其他接口。
示例:
data class Persion(var name: String, var age: String)
fun main(args: Array<String>) {
val persion = Persion("alfred", 28)
println("${persion.name}: ${persion.age}")
}
結果:
alfred: 28
數(shù)據(jù)類內部函數(shù)
Kotlin 中自動生成如下函數(shù),因此數(shù)據(jù)類消除了反復套用代碼。
equals(): Boolean
hashCode(): Int
toString(): String
component() 函數(shù)對應的屬性
copy()
數(shù)據(jù)類hashCode()和equals()
- 如果兩個對象在 kotlin 中相同,那么它們具有相同的hashCode,我們可以使用
hashCode()方法獲得。 - 如果兩個對象的
hashCode()相等,則equals()返回true,否則返回false。
data class Person(var name: String, var age: String)
fun main(args: Array<String>) {
val person = Person("alfred", 28)
val user = person
println("person_hashcode ${person.hashCode()} \nuser_hashcode ${user.hashCode()}")
println("${person.equals(user)}")
}
結果:
persion_hashcode -916812346
user_hashcode -916812346
true
數(shù)據(jù)類copy()
數(shù)據(jù)類提供了一個copy()方法,用于創(chuàng)建對象的副本(或冒號)。 使用copy()方法,可以更改對象的部分或全部屬性。
舉個例子:Person類的對象persion,姓名為alfred 年齡為28。我們創(chuàng)建了另一個名為user的對象person并使用數(shù)據(jù)類的copy()方法,復制了person對象的姓名。
data class Person(var name: String, var age: String)
fun main(args: Array<String>) {
val person = Person("alfred", 28)
val user = person.copy(age = 11)
println("${user.name} : ${user.age}")
}
結果:
alfred : 11
數(shù)據(jù)類toString()
data類的toString()方法返回對象的String表示形式。
data class Person(var name: String, var age: String)
fun main(args: Array<String>) {
val person = Person("alfred", 28)
println(person.toString())
}
結果:
Person(name=alfred, age=28)
數(shù)據(jù)類component()
以上面示例為例,component1()方法返回對象的第一個屬性的值,component2()返回第二個屬性的值。不過一般不采用這種方式獲取屬性。
fun main(args: Array<String>) {
val person = Person("alfred", 28)
println(person.component1())
println(person.component2())
}
結果:
alfred
28