lundi 27 mai 2019

case class vs case object



Case class


Une case classe est définie avec le mot clé case


Elle peut être instanciée sans le mot clé new. Cela est possible car scala génère automatiquement une classe qu’on appelle object companion ayant le même nom (Person) contenant deux méthodes :
§  apply : qui construit un objet via les paramètres de construction et
§  unapply : qui de-construit l’objet qu’on appelle également extracteur (extraction des attributs via l’objet)

Lors de l’appelle d’instanciation de Person(…) ; on fait appel à la méthode Person.apply.

Les cases classes sont serializables par défaut avec les méthodes toString, copy, equals (sur les attributs), hashCode implémentées …




Par défaut les attributs sont immutables (val) et publiques. Il est possible d’avoir des attributs mutables avec le mot clé var ou réduire la visibilité ..


Case object


Les cases objects sont équivalentes de cases classes n’ayant pas d’attributs de construction ; elles sont singletons et serializables avec une implémentation hashCode (à la différence des objects companions). Une case object permet par exemple de créer des enums, des messages Akka …










Aucun commentaire:

Enregistrer un commentaire