JavaRush /Blogue Java /Random-PT /Getters e encapsulamento quebrado
Vadelic
Nível 14
Пасадена

Getters e encapsulamento quebrado

Publicado no grupo Random-PT
Ao resolver problemas, encontrei um comportamento inesperado de getters. Nas palestras aqui e até mesmo nos getters gerados pelo IntelliJ IDEA, é usado o esquema mais simples: public final class A { private A field; public A getField() { return field; } public void setField(A field) { this.field = field; } } Se o campo for do tipo primitivo ou String, que é passado por valor, então está tudo bem, mas se o objeto for passado por referência, então acontece que através do getter você pode obter acesso total ao campo , o que anula o nível de acesso protegido definido. Se o setter contiver alguma condição de validade, ele poderá ser ignorado por meio de tal getter, o que viola o encapsulamento e seria correto criar um clone do objeto para evitar esse problema. Eu entendo que nem todos os objetos podem ser facilmente clonados, e se isso for deixado sob a responsabilidade do programador, então é estranho porque não houve menção a isso em nenhuma parte das palestras. UPD: Um getter, como ideia, é claro, não viola o encapsulamento, mas deve ser escrito de forma a não trair os princípios da OOP. Isso significa que se um getter produz um objeto, ele o faz de tal forma que o usuário não pode alterá-lo de nenhuma outra forma especificada na classe. Existe um método maravilhoso na classe Collections que produz uma coleção somente leitura. Isso impõe uma série de outras restrições, por exemplo, a impossibilidade de ordenação, mas para este caso esta classe possui: unmodifiableSortedSet unmodifiableSortedMap e mais algumas, para maior comodidade. public static Collection unmodifiableCollection(Collection c)
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION