lundi 27 mai 2019

Scala : Object-private and Package scope

Object-private scope : private[this]


En Scala comme en Java, l'accessibilité private donne le droit d'accès à un attribut privé d'une autre instance au sein de la même classe. Clarifions par un exemple... Dans l'exemple ci-dessus, la méthode m peut bien accéder à l'attribut value de l'objet Counter malgré que cet attribut soit déclaré privé. Ce comportement est normal car on est toujours au sein de la classe Counter


Comment peut-on empêcher qu'un attribut privé ne soit accessible que par  l'instance courante de l'objet ? Cela revient à générer une erreur de compilation à la ligne 12  other.value 

Scala nous offre une restriction supplémentaire qu'on appelle object-private scope. Il suffit de déclarer l'attribut comme private[this]. Le mot clé this indique que l'attribut n'est accessible que par l'instance courante. On remarque une erreur de compilation lorsque l'attribut value est déclaré  private[this]



Package scope

L'accessibilité private[nomPackage] donne le droit d'accès à une méthode ou un attribut depuis le package nomPackage et ses sous packages. Dans l'exemple ci-dessus, la méthode doX est déclarée comme private[scala] et donc accessible depuis le package scala contrairement à la méthode privée doY accessible uniquement au sein de la classe Foo



Dans le package other, ni doX ni doY n'est accessible depuis la classe Quux


Aucun commentaire:

Enregistrer un commentaire