BitmapFactory.Options

时间:2019-03-20 11:18:33

标签: java android encapsulation

在学习Android的BitmapFactory.Options类时,我注意到它的字段可公开访问和修改。

这与通用封装规则相反,该通用封装规则规定应将字段声明为private,并且应通过public getter / setter方法来实现对它们的访问/修改。这样,我们可以控制客户如何访问我们班级的领域。

这让我想知道我是否误解了封装概念。 在编写自己的类时,在什么情况下可以忽略封装,就像在BitmapFactory.Options中忽略封装一样?


有人可能会争辩说,在不需要限制/获取字段值时,不需要封装。但是我认为BitmapFactory.Options并非如此,因为例如BitmapFactory.Options.inSampleSize应该是2的幂:

  

解码器使用基于2的幂的最终值,其他任何值将四舍五入到最接近的2的幂。

因此,开发人员可以声明一个setter方法,

  • 拒绝不是2的幂的值;或
  • 将给定值四舍五入到最接近的2的幂,然后再传递给解码器。

1 个答案:

答案 0 :(得分:1)

Javadoc inSampleSize所说的是

  

2的幂通常会更快/更容易让解码器兑现。

这意味着class作者正在委托您决定要为其分配哪个值。
无处指出其他值不起作用,只是由于舍入阶段,它们不会有效。在某些情况下,必须分配非2的幂。

通过查看内部static class,我发现没有理由使用getter / setter封装。
它们将是不必要和多余的,就像许多“尊重” JavaBean 样式的类一样。

为什么您可以拥有50个NLOC班,却有500个NLOC班?保持简单。