具有public变量的类在Encapsulation中被认为是弱的并且它是不是一个糟糕的设计实践?
如果是这种情况下,为什么java.awt.Dimension有2个公共变量width和height?
我认为暴露公共字段并不违反封装本身。封装是实体的属性,实体内部隐藏着复杂的内部结构。这种复杂的结构无法直接访问,因此不会有被破坏的风险。它只能通过公共方法访问,这使得它们工作良好并且不会破坏复杂的内部结构。例如,我们无法HashMap直接访问 的哈希表,也无法破坏它。我们只使用get和put方法来正确处理哈希表状态。但对象的复杂结构在哪里呢Dimension?当我们刚写的时候,哪些东西会被破坏d.width = 23?
我认为在这种情况下使用公共 getter/setter 而不是公共字段是有原因的:品味和约定。我认为后者更重要。但这也取决于我们在何处以及为了什么应用此约定。