107 votes

Constructeurs privés et protégés en Scala

Je me suis interrogé sur l'impact de l'absence d'un constructeur primaire explicite en Scala, qui se contente d'utiliser le contenu du corps de la classe.

En particulier, je soupçonne que le modèle du constructeur privé ou protégé, c'est-à-dire le contrôle de la construction par le biais de l'objet compagnon ou des méthodes d'une autre classe ou d'un autre objet, n'ait pas une mise en œuvre évidente.

Ai-je tort ? Si oui, comment procède-t-on ?

186voto

Aleksander Kmetec Points 1260

Vous pouvez déclarer le constructeur par défaut comme privé/protégé en insérant le mot-clé approprié entre le nom de la classe et la liste des paramètres, comme ceci :

class Foo private () { 
  /* class body goes here... */
}

64voto

Daniel C. Sobral Points 159554

Aleksander La réponse de l'auteur est correcte, mais Programmation en Scala offre une alternative supplémentaire :

sealed trait Foo {
 // interface
}

object Foo {
  def apply(...): Foo = // public constructor

  private class FooImpl(...) extends Foo { ... } // real class
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X