case对象和scala中的对象有什么区别吗?


当前回答

它与case类和class类似,当没有任何字段表示额外的状态信息时,我们只是使用case对象而不是case类。

其他回答

它与case类和class类似,当没有任何字段表示额外的状态信息时,我们只是使用case对象而不是case类。

我们以前知道对象和“case类”。但是“case object”是两者的混合,即它是一个类似于对象的单例,并且在case类中有很多样板。唯一的区别是样板文件是为对象而不是类编写的。

Case对象不会与以下对象一起出现:

应用、取消应用方法。 这里没有复制方法,因为这是一个单例。 没有结构相等比较的方法。 也没有构造函数。

scala> object foo

定义对象foo

scala> case object foocase

定义对象foocase

序列化的区别:

scala> foo.asInstanceOf[Serializable]

java.lang.ClassCastException: foo$不能强制转换到scala。可序列化的 ... 43省略

scala> foocase.asInstanceOf[Serializable]

res1: Serializable = foocase

toString的区别:

scala> foo

res2: foo。类型= foo$@7bf0bac8

scala> foocase

res3: foocase。Type = foocase

Case类与常规类的不同之处在于:

模式匹配支持 equals和hashCode的默认实现 序列化的默认实现 toString的一个更漂亮的默认实现,以及 它们从scala.Product中自动继承的少量功能。

模式匹配、equals和hashCode对于单例来说并不重要(除非你做了一些真正退化的事情),所以你基本上只是得到了序列化、一个漂亮的toString和一些你可能永远不会使用的方法。

case对象隐式地带有方法toString、equals和hashCode的实现,但简单对象没有。 case对象可以序列化,而简单对象不能,这使得case对象作为Akka-Remote的消息非常有用。 在object关键字之前添加case关键字使对象可序列化。