Y a-t-il une différence entre l’object case et l’object dans scala?
Les classes de cas diffèrent des classes ordinaires en ce sens qu’elles obtiennent:
equals
et hashCode
toSsortingng
, et scala.Product
. La correspondance de pattern, equals et hashCode importent peu pour les singletons (à moins que vous ne fassiez quelque chose de vraiment dégénéré), vous obtenez donc une sérialisation, un joli toSsortingng
et quelques méthodes que vous n’utiliserez probablement jamais.
Voici une différence: les objects de cas étendent le trait Serializable
, ils peuvent donc être sérialisés. Les objects réguliers ne peuvent pas par défaut:
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 = java.io.ObjectOutputStream@e7da60 scala> oos.writeObject(B) scala> oos.writeObject(A) java.io.NotSerializableException: A$
scala> object foo
object défini foo
scala> case object foocase
object défini foocase
Différence de sérialisation:
scala> foo.asInstanceOf[Serializable]
java.lang.ClassCastException: foo $ ne peut pas être converti en scala.Serializable
… 43 élidé
scala> foocase.asInstanceOf[Serializable]
res1: Serializable = foocase
à la différence de chaîne:
scala> foo
res2: foo.type = foo $ @ 7bf0bac8
scala> foocase
res3: foocase.type = foocase
Les objects case sont implicitement fournis avec les implémentations des méthodes toSsortingng, equals et hashCode, mais pas les objects simples. Les objects de cas peuvent être sérialisés alors que les objects simples ne le peuvent pas, ce qui rend les objects de cas très utiles en tant que messages avec Akka-Remote. L’ajout du mot-clé case avant le mot-clé object rend l’object sérialisable.
Il est similaire à la case class
et à la class
, nous utilisons simplement un case object
au lieu d’une case class
de case class
lorsqu’il n’y a pas de champs représentant des informations d’état supplémentaires.