Разница между объектом объекта и объектом

Есть ли разница между объектом и объектом case в scala?

Ответ 1

Классы классов отличаются от обычных классов тем, что они получают:

  • поддержка соответствия шаблону
  • реализация по умолчанию equals и hashCode
  • реализация сериализации по умолчанию
  • более красивая реализация по умолчанию toString и
  • небольшое количество функциональных возможностей, которые они получают от автоматического наследования с scala.Product.

Совпадение шаблонов, equals и hashCode не имеют большого значения для синглонов (если вы не делаете что-то действительно вырожденное), поэтому вы почти просто получаете сериализацию, хороший toString и некоторые методы, которые вы, вероятно, никогда не будете использовать.

Ответ 2

Здесь один объект с разным случаем расширяет черту Serializable, поэтому они могут быть сериализованы. По умолчанию обычные объекты не могут:

scala> object A
defined module A

scala> case object B
defined module B

scala> import java.io._
import java.io._    

scala> val bos = new ByteArrayOutputStream                                            
bos: java.io.ByteArrayOutputStream =  

scala> val oos = new ObjectOutputStream(bos)                                          
oos: java.io.ObjectOutputStream = [email protected]                   

scala> oos.writeObject(B)

scala> oos.writeObject(A)
java.io.NotSerializableException: A$

Ответ 3

scala> object foo

определенный объект foo

scala> case object foocase

определенный объект foocase

Разница в сериализации:

scala> foo.asInstanceOf[Serializable]

java.lang.ClassCastException: foo $нельзя отнести к scala. Сериализуемый
 ... 43 elided

scala> foocase.asInstanceOf[Serializable]

res1: Serializable = foocase

разница toString:

scala> foo

res2: foo.type = foo [email protected]

scala> foocase

res3: foocase.type = foocase

Ответ 4

объекты case неявно приходят с реализациями методов toString, equals и hashCode, но простые объекты этого не делают. случайные объекты могут быть сериализованы, пока простые объекты не могут, что делает объекты объектов очень полезными в качестве сообщений с Akka-Remote. Добавление ключевого слова case до ключевого слова объекта делает объект сериализуемым.

Ответ 5

Он похож на case class и class, мы просто используем case object вместо case class, когда нет никаких полей, представляющих дополнительную информацию о состоянии.