class - 数据类与没有主体的类有何不同?
问题描述
我刚刚发现 kotlin 类中的正文和标题是可选的。这意味着我们可以像这样声明类:-
class Contact(val id: Int, var email: String)
但它看起来不像数据类声明。那么,如果我们可以使用普通类来存储数据,为什么还需要数据类呢?
解决方案
数据类(用关键字显式声明data
)有一堆理想的自动生成方法,您通常希望这些方法用于存储数据的类:
- 一致
equals
/hashCode
使用构造函数中声明的所有属性,这样==
操作符才有意义 - 一个有用的
toString()
显示所有属性及其值 componentN()
允许解构的函数copy()
用于复制实例并可选择更改属性子集的函数
此外,从您的问题标题看来,您认为data class
es 的身体中不能有成员 - 这是一种误解,他们可以。
但是,重要的是要注意,您在正文中而不是在构造函数中声明的每个额外属性都不会成为生成方法的一部分(例如,它们不会计入equals()
)。
推荐阅读
- server - tui 日历应该显示服务器时间而不是客户端时间
- c# - dotnet core 从表单数据中获取字典
- javascript - Javascript 使用 Uint8Array 获取 Blob
- ios - Xcode 12 更新“AFNetworking”命令 PhaseScriptExecution 失败,退出代码为非零
- reactjs - Material ui TableContext 返回“未定义”
- centos - 本地 3000 端口不可用(CentOS ,browser-sync, VSCode Remote SSH)
- python - 如何将逗号分隔的对象导出到 .csv 文件中
- mips - MIPS中的lhu和lbu有什么区别?
- html - [Python]Robot Framework中的Selenium关键字点击标签内的span role="button"
- python - 设置聊天机器人