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