Инкапсуляция не работает Это свойство считается невероятно важным в ООП языках, где она прописана как один из ключевых элементов. Делая наши поля приватными, мы таким образом даем доступ только через публичный интерфейс, который следит за соблюдением инвариантов. Так? Только если в теории. На практике поменять почти все что угодно не составляет никакого труда. Предположим что у нас есть пользователь и у него должна быть установлена хотя бы одна роль и это проверяется где-то внутри пользователя (тут не показано) при изменении списка ролей. class User { private final List<Role> roles = new ArrayList<>(); public List<Role> getRoles() { return roles; } } Но нам никто не машет сделать так: user.getRoles().clear(); // теперь ролей нет // Можно добавить дубль user.getRoles().add(new Role("admin")); user.getRoles().add(new Role("admin")); Даже если геттеров нет, рефлексия пробивает любую «защиту»: var field = User.class.getDeclaredField("roles"); field.setAccessible(true); @SuppressWar
Инкапсуляция не работает
21 июля 202521 июл 2025
7
1 мин