在学习Android的BitmapFactory.Options
课程时,我注意到它的字段可以公开访问和修改。
这与声明字段应声明为private
的一般封装规则相反,并且应通过public
getter / setter方法实现访问/修改它们。这样我们就可以控制客户如何接近我们班级的领域。
这让我想知道我是否误解了封装概念。在编写我自己的类时,在哪种情况下我可以忽略封装,就像它在BitmapFactory.Options
中被忽略一样?
有人可能会争辩说,在获取/设置字段值时不需要限制时不需要封装。但我认为BitmapFactory.Options
不是这种情况,因为例如BitmapFactory.Options.inSampleSize
应该是2的幂:
解码器使用基于2的幂的最终值,任何其他值将向下舍入到最接近的2的幂。
因此,开发人员可以声明一个setter方法
Javadoc对inSampleSize
所说的是
此外,2的幂通常更快/更容易让解码器兑现。
这意味着class
作者委托您决定分配给它的值。
没有任何地方说明其他价值观是行不通的,只是因为四舍五入阶段它们不会那么有效。可能存在必须分配非二次幂数的用例。
通过查看内部static class
,我认为没有理由使用getter / setter封装。
它们是不必要的和多余的,就像许多“尊重”JavaBean风格的类一样。
为什么有一个500 NLOC
级别,当你可以有一个50 NLOC
一个?把事情简单化。