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 方法

JavadocinSampleSize 的描述是

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 一个?保持简单。