首页 > 解决方案 > 数据类与没有主体的类有何不同?

问题描述

我刚刚发现 kotlin 类中的正文和标题是可选的。这意味着我们可以像这样声明类:-

class Contact(val id: Int, var email: String) 

但它看起来不像数据类声明。那么,如果我们可以使用普通类来存储数据,为什么还需要数据类呢?

标签: classkotlinoopdata-class

解决方案


数据类(用关键字显式声明data)有一堆理想的自动生成方法,您通常希望这些方法用于存储数据的类:

  • 一致equals/hashCode使用构造函数中声明的所有属性,这样==操作符才有意义
  • 一个有用的toString()显示所有属性及其值
  • componentN()允许解构的函数
  • copy()用于复制实例并可选择更改属性子集的函数

此外,从您的问题标题看来,您认为data classes 的身体中不能有成员 - 这是一种误解,他们可以。

但是,重要的是要注意,您在正文中而不是在构造函数中声明的每个额外属性都不会成为生成方法的一部分(例如,它们不会计入equals())。


推荐阅读