反转布尔属性的值

时间:2012-07-12 14:02:23

标签: java properties conventions

我有一个由数据库表支持的(Java)对象。在数据库中,(新)列中的值“N”表示禁止某些内容,而值“Y”或null(默认值)表示允许某些内容。

在我的对象中,我希望产生相同的效果:默认为forbidden = false,但如果需要,可以将其设置为true。我正在使用现有代码,所以我不想修改构造函数。

然而,该物业的使用方式可能是(我认为更容易理解)是积极的:isAllowed()/setAllowed()。因此,我将代码设置为:

public boolean isAllowed()
{   return !this.forbidden;  }
public void setAllowed(boolean allowed)
{   this.forbidden = ! allowed;  }
  1. 是否有其他人认为if ([!]isAllowed()) {...}if ([!]isForbidden()) {...}更容易理解 {{1}},还是我做出了错误的假设?
  2. 我的代码有意义吗? (是的,我正试图正确评论,这就是我要问的原因。)
  3. 我的主要问题:这种调整是否有传统的名称?由带有公开属性的相反值的字段支持的布尔属性。
  4. 谢谢。

2 个答案:

答案 0 :(得分:3)

  

(1)是否有其他人认为if ([!]isAllowed()) {...}if ([!]isForbidden()) {...}更容易理解......

是。积极通常是要走的路。不总是,但通常。考虑一下代码想要分析是否允许 的情况:

if (something.isAllowed()) {
    // do the thing
}

VS

if (!something.isForbidden()) {
   // do the thing
}

第一个只是流畅地阅读更多。 (但这是主观的。)

只是FWIW,我可能会将数据成员保留为allowed而不是forbidden。所以你不会在访问器中反转它。因为上面的参数同样适用于直接使用字段的代码(假设你有代码),使用访问器代码。

  

(2)我的代码有意义吗?

除了支撑风格,是的。 :-)(风格只是风格,完全是你自己的决定。)

  

(3) - 我的主要问题:这种调整是否有传统的名称?

我从来没有听过,但它并不常见。我想你正在做一些模糊的外观或类似适配器的东西,但这是一个真正的延伸。 : - )

答案 1 :(得分:2)

它没有名称,它只是反转布尔值。

Wy不提供isAllowed / isForbidden个访问者?哪个有意义取决于上下文,我没有任何理由明确 dis -allow使用上下文中最自然的东西。