Kotlin - 資料類



在本章中,我們將學習 Kotlin 資料類。Kotlin 資料類僅用於儲存資料,除了儲存資料外,它不提供任何其他功能。

Kotlin 類被定義為資料類的條件如下:

  • 主建構函式需要至少一個引數。

  • 所有主建構函式引數都需要標記為 val 或 var。

  • 資料類不能是抽象的、開放的、密封的或內部的。

  • 該類可以擴充套件其他類或實現介面。如果您使用的是 1.1 之前的 Kotlin 版本,則該類只能實現介面。

語法

定義 Kotlin 資料類很簡單。如果 Kotlin 類用 **data** 關鍵字標記,則它成為資料類。例如

data class Book(val name: String, val publisher: String, var reviewScore: Int)

Kotlin 資料類的好處是,當您宣告一個 Kotlin 資料類時,編譯器會自動生成建構函式、toString()、equals()、hashCode() 以及額外的 copy() 和 componentN() 函式。

示例

Kotlin 資料類的例項化方式與其他 Kotlin 類相同。

data class Book(val name: String, val publisher: String, var reviewScore: Int)

fun main(args: Array<String>) {

   val book = Book("Kotlin", "Tutorials Point", 10)
   
   println("Name = ${book.name}")
   println("Publisher = ${book.publisher}")
   println("Score = ${book.reviewScore}")
	  
}

當您執行上述 Kotlin 程式時,它將生成以下輸出:

Name = Kotlin
Publisher = Tutorials Point
Score = 10

Copy 函式

當我們定義 Kotlin 資料類時,copy() 函式會自動建立。此 copy 函式可用於複製物件,更改其某些屬性,但保持其餘屬性不變。以下是一個示例:

data class Book(val name: String, val publisher: String, var reviewScore: Int)

fun main(args: Array<String>) {

   val original = Book("Kotlin", "Tutorials Point", 10)
   
   val copied = original.copy(reviewScore=5)
   
   println("Original Book")
   println("Name = ${original.name}")
   println("Publisher = ${original.publisher}")
   println("Score = ${original.reviewScore}")
   
   println("Copied Book")
   println("Name = ${copied.name}")
   println("Publisher = ${copied.publisher}")
   println("Score = ${copied.reviewScore}")
	
}

當您執行上述 Kotlin 程式時,它將生成以下輸出:

Original Book
Name = Kotlin
Publisher = Tutorials Point
Score = 10
Copied Book
Name = Kotlin
Publisher = Tutorials Point
Score = 5

toString 函式

當我們定義 Kotlin 資料類時,toString() 函式也會自動建立。此函式返回物件的字串表示形式。以下是一個示例:

data class Book(val name: String, val publisher: String, var reviewScore: Int)

fun main(args: Array<String>) {

   val book = Book("Kotlin", "Tutorials Point", 10)

   
   println(book.toString())
	
}

當您執行上述 Kotlin 程式時,它將生成以下輸出:

Book(name=Kotlin, publisher=Tutorials Point, reviewScore=10)

hashCode() 和 equals() 函式

hasCode() 函式返回物件的雜湊碼。如果兩個物件相等,則 hashCode() 對這些物件返回相同的整數值。

equals() 函式如果兩個物件相等或具有相同的 hasCode 值,則返回 **true**,否則返回 **false**。

以下是一個示例:

data class Book(val name: String, val publisher: String, var reviewScore: Int)

fun main(args: Array<String>) {

   val original = Book("Kotlin", "Tutorials Point", 10)
   
   val copy1 = original.copy(reviewScore=5)
   val copy2 = original.copy(reviewScore=7)
   
   println("Original Hashcode = ${original.hashCode()}")
   println("Copy1 Hashcode = ${copy1.hashCode()}")
   println("Copy2 Hashcode = ${copy2.hashCode()}")
   
   if( copy1.equals(copy2)){
      println("Copy1 is equal to Copy2.")
   }else{
      println("Copy1 is not equal to Copy2.")
   }
}

當您執行上述 Kotlin 程式時,它將生成以下輸出:

Original Hashcode = 1957710662
Copy1 Hashcode = 1957710657
Copy2 Hashcode = 1957710659
Copy1 is not equal to Copy2.

解構宣告

我們可以使用解構宣告將物件解構為多個變數。例如

data class Book(val name: String, val publisher: String, var reviewScore: Int)

fun main(args: Array<String>) {

   val book = Book("Kotlin", "Tutorials Point", 10)
   
   val( name, publisher,reviewScore ) = book
   
   println("Name = $name")
   println("Publisher = $publisher")
   println("Score = $reviewScore")
	  
}

當您執行上述 Kotlin 程式時,它將生成以下輸出:

Name = Kotlin
Publisher = Tutorials Point
Score = 10

測驗時間 (面試 & 考試準備)

Q 2 - 當我們定義 Kotlin 資料類時,哪個函式不是預設建立的?

A - copy() 函式

B - toString() 函式

C - componentN()

D - 以上所有

答案:D

解釋

當我們定義 Kotlin 資料類時,所有提到的函式都會自動建立。

答案:C

解釋

componentN() 函式用於將物件解構為多個變數。

廣告