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关键字使对象可序列化。