Есть ли разница между объектом и объектом 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
, когда нет никаких полей, представляющих дополнительную информацию о состоянии.