JavaRush /Java 博客 /Random-ZH /吸气剂和破损的封装
Vadelic
第 14 级
Пасадена

吸气剂和破损的封装

已在 Random-ZH 群组中发布
在解决问题时,我遇到了吸气剂的意外行为。在这里的讲座中,甚至在 IntelliJ IDEA 生成的 getter 中,都使用了最简单的方案: public final class A { private A field; public A getField() { return field; } public void setField(A field) { this.field = field; } } 如果字段是原始类型或 String,按值传递,那么一切都很好,但如果对象是按引用传递,那么事实证明,通过 getter,您可以获得对该字段的完全访问权限,这使得设置的受保护访问级别无效。如果setter包含任何有效性条件,那么可以通过这样的getter绕过它,这违反了封装性,并且创建对象的克隆以避免这种麻烦是正确的。我知道并非所有对象都可以轻松克隆,如果这是由程序员负责的,那么奇怪的是为什么讲座中没有提到这一点。UPD:吸气剂作为一个想法,当然不会违反封装,但它的编写方式必须不违背 OOP 原则。这意味着,如果 getter 生成一个对象,那么用户无法以类中指定的任何其他方式更改它。Collections 类中有一个很棒的方法 可以生成只读集合。这施加了许多其他限制,例如,不可能进行排序,但对于这种情况,此类具有: unmodifyingSortedSet unmodifyingSortedMap 以及其他一些限制,以提供更大的便利。 public static Collection unmodifiableCollection(Collection c)
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION