BitmapFactory.Options 中没有封装
No encapsulation in BitmapFactory.Options
在研究 Android 的 BitmapFactory.Options
class 时,我注意到它的字段是公开的,可以访问和修改。
这与声明字段应声明为 private
并且 accessing/modifying 应通过 public
getter/setter 方法实现的一般封装规则相反。这样我们就可以控制客户如何接近我们的 class 字段。
这让我想知道我是否误解了封装概念。
在编写自己的 classes 时,在哪些情况下我可以忽略封装,就像在 BitmapFactory.Options
?
中忽略一样
有人可能会争辩说,当 getting/setting 字段值不需要限制时,封装就没有必要了。但我认为 BitmapFactory.Options
不是这种情况,因为例如 BitmapFactory.Options.inSampleSize
应该是 2 的幂:
the decoder uses a final value based on powers of 2, any other value will be rounded down to the nearest power of 2.
因此,开发人员可以声明一个 setter 方法
- 拒绝不是2的幂的值;或者
- 在传递给解码器之前,将给定值四舍五入为最接近的 2 的幂。
Javadoc 对 inSampleSize
的描述是
Also, powers of 2 are often faster/easier for the decoder to honor.
这意味着 class
作者将分配给它的值的决定委托给您。
无处 声明其他值不起作用,只是它们不会有效 ,因为舍入阶段。可能存在必须分配非二次幂数的用例。
通过查看内部 static class
,我认为没有理由使用 getters/setters 封装。
它们将是不必要和多余的,就像许多 class "respect" JavaBean 风格的 classes 一样。
为什么要 500 NLOC
class 而你可以有 50 NLOC
一个?保持简单。
在研究 Android 的 BitmapFactory.Options
class 时,我注意到它的字段是公开的,可以访问和修改。
这与声明字段应声明为 private
并且 accessing/modifying 应通过 public
getter/setter 方法实现的一般封装规则相反。这样我们就可以控制客户如何接近我们的 class 字段。
这让我想知道我是否误解了封装概念。
在编写自己的 classes 时,在哪些情况下我可以忽略封装,就像在 BitmapFactory.Options
?
有人可能会争辩说,当 getting/setting 字段值不需要限制时,封装就没有必要了。但我认为 BitmapFactory.Options
不是这种情况,因为例如 BitmapFactory.Options.inSampleSize
应该是 2 的幂:
the decoder uses a final value based on powers of 2, any other value will be rounded down to the nearest power of 2.
因此,开发人员可以声明一个 setter 方法
- 拒绝不是2的幂的值;或者
- 在传递给解码器之前,将给定值四舍五入为最接近的 2 的幂。
Javadoc 对 inSampleSize
的描述是
Also, powers of 2 are often faster/easier for the decoder to honor.
这意味着 class
作者将分配给它的值的决定委托给您。
无处 声明其他值不起作用,只是它们不会有效 ,因为舍入阶段。可能存在必须分配非二次幂数的用例。
通过查看内部 static class
,我认为没有理由使用 getters/setters 封装。
它们将是不必要和多余的,就像许多 class "respect" JavaBean 风格的 classes 一样。
为什么要 500 NLOC
class 而你可以有 50 NLOC
一个?保持简单。