Java BitmapFactory中没有封装。选项

Java BitmapFactory中没有封装。选项,java,android,encapsulation,Java,Android,Encapsulation,在研究Android的BitmapFactory.Options类时,我注意到它的字段是公开的,可以访问和修改 这与一般封装规则相反,该规则规定字段应声明为private,并且应通过publicgetter/setter方法访问/修改字段。通过这种方式,我们可以控制客户端如何访问类的字段 这让我怀疑我是否误解了封装概念。 在编写自己的类时,在哪些情况下我可以忽略封装,就像在BitmapFactory.Options中忽略封装一样 有人可能会认为,如果在获取/设置字段值时不需要限制,则不需要封装

在研究Android的
BitmapFactory.Options
类时,我注意到它的字段是公开的,可以访问和修改

这与一般封装规则相反,该规则规定字段应声明为
private
,并且应通过
public
getter/setter方法访问/修改字段。通过这种方式,我们可以控制客户端如何访问类的字段

这让我怀疑我是否误解了封装概念。 在编写自己的类时,在哪些情况下我可以忽略封装,就像在
BitmapFactory.Options中忽略封装一样


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

解码器使用基于2次方的最终值,任何其他值将向下舍入到最接近的2次方

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

  • 拒绝不是2的幂的值;或
  • 在将给定值传递给解码器之前,将其舍入到最接近的2次方
Javadoc对样本大小
的说明是

此外,2的幂通常更快/更容易让解码器接受

这意味着
作者正在委托您决定将哪个值分配给它。
没有规定任何地方其他值将不起作用,只是由于四舍五入阶段,它们的效率不高。在某些情况下,可能需要分配两个数字的非幂

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


当你可以有一门50
NLOC
的课时,为什么还要有一门500
NLOC
的课呢?保持简单。

我认为其他值也有效,因为它们最终会被“解码器”四舍五入到2的幂。我的问题是为什么不通过setter方法来实现呢?关于“内部静态类”语句,请详细说明为什么这样的类不需要getter/setter?虽然它是静态的,但它仍然可以通过其公共构造函数实例化,并且具有非静态字段。@SoSa忘记内部静态的东西,我只是指出它是如何声明的。decoder类是实现舍入逻辑的正确位置,因为在这里它是集中的。如果逻辑在setter中,那么可能需要在解码器使用的每个类中复制它。我从您的回答得出结论,它没有使用getter/setter,因为访问/修改字段时不需要限制?在我自己的类中,只有当我需要对类客户端访问/修改字段实施限制时,我才应该使用getter/setter?@SoSa选项类只是一个简单的pojo,一个信息载体。作为一个简单的载体,它内部不应该有任何逻辑。如果您的类是用于承载信息的简单pojo,则通常不需要实现验证或其他逻辑类型。