JavaRush /Blog Java /Random-FR /Getters et encapsulation cassée
Vadelic
Niveau 14
Пасадена

Getters et encapsulation cassée

Publié dans le groupe Random-FR
En résolvant des problèmes, j'ai rencontré un comportement inattendu des getters. Dans les cours ici et même dans les getters générés par IntelliJ IDEA, le schéma le plus simple est utilisé : public final class A { private A field; public A getField() { return field; } public void setField(A field) { this.field = field; } } si le champ est un type primitif ou une chaîne, qui est passé par valeur, alors tout va bien, mais si l'objet est passé par référence, Ensuite, il s'avère que via le getter, vous pouvez obtenir un accès complet au champ, ce qui annule le niveau d'accès protégé défini. Si le setter contient une condition de validité, alors il peut être contourné via un tel getter, ce qui viole l'encapsulation et il serait correct de créer un clone de l'objet pour éviter ce problème. Je comprends que tous les objets ne peuvent pas être facilement clonés, et si cela est laissé à la responsabilité du programmeur, alors il est étrange qu'il n'y ait aucune mention de cela dans les cours. UPD : Un getter, en tant qu'idée, ne viole bien sûr pas l'encapsulation, mais il doit être écrit de manière à ne pas trahir les principes de la POO. Cela signifie que si un getter produit un objet, il le fait de telle manière que l'utilisateur ne peut pas le modifier d'une autre manière spécifiée dans la classe. Il existe une méthode merveilleuse dans la classe Collections qui produit une collection en lecture seule. Cela impose un certain nombre d'autres restrictions, par exemple l'impossibilité de trier, mais pour ce cas cette classe a : unmodifiableSortedSet unmodifiableSortedMap et quelques autres, pour plus de commodité. public static Collection unmodifiableCollection(Collection c)
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION