1

我有一个由数据库表支持的(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()) {...},还是我做出了错误的假设?
  2. 我的代码有意义吗?(是的,我正在尝试正确评论它,这就是我要问的原因。)
  3. 我的主要问题是:这种调整是否有一个传统的名称?由字段支持的布尔属性,该字段带有公开属性的相反值。

谢谢你。

4

2 回答 2

3

(1) 有没有人认为if ([!]isAllowed()) {...}if ([!]isForbidden()) {...}……更容易理解?

是的。积极因素通常是要走的路。不总是,但通常。考虑代码想要根据是否允许进行分支的情况

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

对比

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

第一个读起来更流畅。(但这是主观的。)

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

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

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

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

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

于 2012-07-12T14:04:58.733 回答
2

它没有名字,它只是反转一个布尔值。

为什么不同时提供isAllowed/isForbidden访问器?这是否有意义取决于上下文,我看不出有任何理由明确禁止使用上下文中最自然的东西。

于 2012-07-12T14:05:51.607 回答