3

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

4

1 回答 1

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.

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

componentN()函数支持解构,如for ((a, b, c) in dataClass) { ... }

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

如果您认为某些类可能会扩展您的类,请不要将其设为数据类。

如果您认为将来没有类会扩展您的类,并且您可能需要销毁或 copy() 函数,则将其设为数据类。

于 2017-06-22T02:50:21.370 回答