【发布时间】:2018-06-24 12:44:04
【问题描述】:
我有一个类是字符串的解析结果,所以我必须强制 toString() 返回源字符串而不是那些解析的值。它还具有自定义的 equals()/hashCode() 机制。仍然将其标记为数据类有什么好处吗?
【问题讨论】:
标签: kotlin data-class
我有一个类是字符串的解析结果,所以我必须强制 toString() 返回源字符串而不是那些解析的值。它还具有自定义的 equals()/hashCode() 机制。仍然将其标记为数据类有什么好处吗?
【问题讨论】:
标签: kotlin data-class
数据类的自动生成部分是:
编译器会自动从所有 在主构造函数中声明的属性:
- 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) { ... } 那样进行解构
但是,数据类不能被继承。 (您可以定义一个扩展另一个非数据类的数据类。)
如果您认为某些类可能会扩展您的类,请不要将其设为数据类。
如果您认为将来没有类会扩展您的类,并且您可能需要销毁或复制()函数,则将其设为数据类。
【讨论】: