Kotlin 中的对象和数据对象

Fan*_*dez 12 kotlin

我在 Sealed 类中编写了这 3 个游戏状态:

sealed class Status {
    object Idle : Status()
    object Active : Status()
    object GameOver : Status()
}
Run Code Online (Sandbox Code Playgroud)

IDE 建议我应该使用 adata object而不是object.

在此输入图像描述

问题是我从来没有听说过data object。我环顾四周,没有找到与 相关的可靠解释data object。例如,这个2015 年的答案表明这是一个错误!

我正在寻找您的想法 data object及其用法。

Fan*_*dez 17

我最终从Kotlin 文档中找到了一些有关数据对象的可靠信息

当您在普通对象之前添加时,data modifier您只需向普通对象添加一些类似于数据类的功能。例如, atoString()会自动为您生成,这样当您打印时,您将获得不带@addressdata object的人类可读的类名称。

该文档确实建议data objects在密封类中使用 a 与数据类一起使用。

数据对象声明对于密封层次结构(例如密封类或密封接口)特别有用,因为它们允许您与可能与对象一起定义的任何数据类保持对称性:

总之,添加data修饰符可以增强普通对象的底层toString()功能。equals()/hashCode() pair然后,增强的对象将Data Classes与密封类层次结构中的工作方式相匹配。

注意- 与数据类不同,数据对象不具有copy() - 对象是具有一个实例的单例 -并且componentN() - 对象没有属性且无法解构 - 函数