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

我有一个类是一个字符串的解析结果,所以我必须执行toString()返回该源字符串,而不是那些分析的值。 它也有自定义的equals()/ hashCode()机制。 把它标记为数据类还有什么好处吗?

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

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

- 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. 

如果这些函数中的任何一个在类体中显式定义或者从基类继承,它将不会被生成。

componentN()函数使解构结构像for ((a, b, c) in dataClass) { ... }

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

如果你认为有些类可能会扩展你的类,那么不要把它作为一个数据类。

如果你认为将来没有类会扩展你的类,你可能需要销毁或copy()函数,然后把它作为一个数据类。