即使我实现了所有的hashCode(),equals()和toString(),我还应该使用数据类吗?

gle*_*e8e 3 kotlin data-class

我有一个类,它是字符串的解析结果,因此我必须强制执行toString()以返回该源字符串而不是那些已解析的值.它还具有自定义equals()/ hashCode()机制.将其标记为数据类还有什么好处?

Nae*_*mul 5

自动生成的数据类部分是:

编译器自动从主构造函数中声明的所有属性派生以下成员:

- equals()/hashCode() pair,
- toString() of the form "User(name=John, age=42)",
- componentN() functions corresponding to the properties in their order of declaration,
- copy() function.
Run Code Online (Sandbox Code Playgroud)

如果这些函数中的任何一个在类体中显式定义或从基类型继承,则不会生成它们.

componentN()功能可以实现解密for ((a, b, c) in dataClass) { ... }

但是,不能继承数据类.(您可以定义一个扩展另一个非数据类的数据类.)

如果您认为某些类可能扩展您的类,那么请不要将其作为数据类.

如果您认为将来没有类会扩展您的类,并且您可能需要destroy或copy()函数,那么将其设为数据类.