[Kotlin] Data class
Kotlin Data Class
2023-09-14 08:59:13 时间
If we want to use Class to represent a piece of data such as Object, we can use Data class instead of normal class.
Difference: Data class has better toString() fun:
class Book (val title: String, val author: String, val publicationYear: Int, var price: Double) {} data class DataBook(val title: String, val author: String, val publicationYear: Int, var price: Double) {} fun main() { var book = Book("Super book", "John Doe", 2014, 99.09) var dataBook = DataBook("Super Book", "John Doe", 2014, 99.09) println(book) // Book@5451c3a8 println(dataBook) // DataBook(title=Super Book, author=John Doe, publicationYear=2014, price=99.09) }
Of course, we can override toString() fun in Book class, but DataClass already taken care for us.
Secondly, data class has better equals check:
class Book (val title: String, val author: String, val publicationYear: Int, var price: Double) {} data class DataBook(val title: String, val author: String, val publicationYear: Int, var price: Double) {} fun main() { var book = Book("Super book", "John Doe", 2014, 99.09) var book2 = Book("Super book", "John Doe", 2014, 99.09) var dataBook = DataBook("Super Book", "John Doe", 2014, 99.09) var dataBook2 = DataBook("Super Book", "John Doe", 2014, 99.09) println(book) // Book@5451c3a8 println(dataBook) // DataBook(title=Super Book, author=John Doe, publicationYear=2014, price=99.09) println(book.equals(book2)) // false println(dataBook.equals(dataBook2)) // true }
Useful copy() method:
var dataBook3 = dataBook.copy() // copy the same data var dataBook4 = dataBook.copy(price=89) // copy with modification
Destructing:
var (title, author, year, price) = dataBook
hashSet: (no repeat items)
var setBooks = hashSetOf(dataBook, dataBook3)
相关文章
- Kotlin与Java的异同(一)
- 聊聊Kotlin中的元编程
- Kotlin安卓编程—-生命周期以及启动方式
- Kotlin 学习笔记(七)—— Flow 数据流学习实践指北(三)冷流转热流以及代码实例
- 【Kotlin】扩展接收者 与 分发接收者 ( 类内部扩展用法 | 注意事项 | open 修饰扩展 )
- 【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)
- 【Kotlin】循环控制流 ( for 循环 | Iterator 遍历形式 | Iterator 遍历要求 | IntArray 源码解析 )
- 【Jetpack】DataBinding 架构组件 ② ( 字符串拼接函数 | 绑定点击事件函数 | DataBinding 布局中使用 import 标签导入 Java、Kotlin 类 )
- 【Kotlin 协程】Flow 异步流 ⑤ ( 流的上下文 | 上下文保存 | 查看流发射和收集的协程 | 不能在不同协程中执行流的发射和收集操作 | 修改流发射的协程上下文 | flowOn函数 )
- 【Kotlin 协程】Channel 通道 ② ( Channel 通道容量 | Channel 通道迭代 | 使用 iterator 迭代器进行迭代 | 使用 for in 循环进行迭代 )
- 【Kotlin】Kotlin 语言简介 ( Kotlin 语言发展 | Kotlin 语言与 Java 虚拟机 | Java 与 Kotlin 联系 | Kotlin 跨平台特性 )
- 【Kotlin】标准库函数总结 ( apply 函数 | let 函数 | run 函数 | with 函数 | also 函数 | takeIf 函数 | takeUnless 函数 )
- 【Kotlin】集合操作 ⑤ ( Map 集合 | 获取 Map 值 | Map 遍历 | 可变 Map 集合 )
- 【Kotlin】类的初始化 ③ ( init 初始化块 | 初始化顺序 : 主构造函数属性赋值 -> 类属性赋值 -> init 初始化块代码 -> 次构造函数代码 )
- ORA-55631: Table has columns with data types that are not supported by Flashback Data Archive ORACLE 报错 故障修复 远程处理
- Kotlin之基本语法详解手机开发
- Mysql导入Data:步骤与实践(mysql导入data)
- data miningUnlocking the Power of Oracle Data Mining(roracle)
- 初探MySQL:Data初始化指南(mysql初始化data)
- 深入了解MySQL数据管理之Data(mysql下的data)