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

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

One Solution collect form web for “即使我实现了hashCode(),equals()和toString(),我应该使用数据类吗?”

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

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

- 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()函数,然后把它作为一个数据类。

  • Kotlin:泛型集合到泛型数组
  • 方法验证Hibernate
  • Kotlin readBytes()永远不会完成
  • Kotlin中可能导致内存泄漏的语言功能是什么?
  • :在Gradle(混合Java + Kotlin项目)中compileKotlin失败
  • 修正泛型类型到第一个参数的类型
  • 如何在Android中使用Kotlin动态添加按钮
  • Kotlin:Java无法解析Kotlin Symbol?
  • Kotlin language will be the best programming language for Android.