- 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 - 中断并继续
- 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 数据类时,编译器会自动生成 Constructor、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
复印功能
当我们定义 Kotlin 数据类时,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() 为对象返回相同的整数值。
如果两个对象相等或者它们具有相同的 hasCode 值,则equals() 函数返回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
测验时间(面试和考试准备)
问题 1 - Kotlin 中数据类的用途是什么:
答案:A
解释
Kotlin 数据类被定义为仅保存数据。
答案:D
解释
所有提到的函数都是在我们定义 Kotlin 数据类时自动创建的。
答案:C
解释
函数 componentN() 用于将对象解构为多个变量。