- Kotlin 教程
- Kotlin - 首页
- Kotlin - 概述
- Kotlin - 环境设置
- Kotlin - 架构
- Kotlin - 基本语法
- Kotlin - 注释
- Kotlin - 关键字
- Kotlin - 变量
- Kotlin - 数据类型
- Kotlin - 运算符
- Kotlin - 布尔值
- Kotlin - 字符串
- Kotlin - 数组
- Kotlin - 范围
- Kotlin - 函数
- Kotlin 控制流
- Kotlin - 控制流
- Kotlin - if...Else 表达式
- Kotlin - When 表达式
- Kotlin - For 循环
- Kotlin - While 循环
- Kotlin - Break 和 Continue
- Kotlin 集合
- Kotlin - 集合
- Kotlin - 列表
- Kotlin - 集合
- Kotlin - 映射
- Kotlin 对象和类
- Kotlin - 类和对象
- Kotlin - 构造函数
- Kotlin - 继承
- Kotlin - 抽象类
- Kotlin - 接口
- Kotlin - 可见性控制
- Kotlin - 扩展
- Kotlin - 数据类
- Kotlin - 密封类
- Kotlin - 泛型
- Kotlin - 委托
- Kotlin - 解构声明
- Kotlin - 异常处理
- Kotlin 有用资源
- Kotlin - 快速指南
- Kotlin - 有用资源
- Kotlin - 讨论
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 1 - Kotlin 中数据类的用途是什么?
答案:A
解释
Kotlin 数据类仅用于保存数据。
答案:D
解释
当我们定义 Kotlin 数据类时,所有提到的函数都会自动创建。
Q 2 - Kotlin 数据类中 componentN() 函数的作用是什么?
答案:C
解释
componentN() 函数用于将对象解构为多个变量。