Jig*_*shi 231

假设你有

boolean active;
Run Code Online (Sandbox Code Playgroud)

访问者的方法是

public boolean isActive(){return this.active;}

public void setActive(boolean active){this.active = active;}
Run Code Online (Sandbox Code Playgroud)

也可以看看

  • 你能指出Sun的代码约定部分,其中明确涵盖了布尔getter名称吗?我找不到. (8认同)
  • 我们如何从自定义名称到客户名称?;) (4认同)
  • @Assegd 将其命名为“customerName”或“customName”会令人困惑,并且并不表示它是布尔值。看到变量我希望它包含一个名称。在这种情况下,它应该被称为“hasCustomName”IMO。 (4认同)
  • 我有一个名为`hasCustomName`的**布尔**,现在应该为它的**getter**和**setter**方法命名?`setHasCustomName [setter]`和`hasCustomName [getter]`好吗? (3认同)

Nar*_*yan 79

http://geosoft.no/development/javastyle.html#Specific

  1. is 前缀应该用于布尔变量和方法.

    isSet,isVisible,isFinished,isFound,isOpen

这是Sun用于Java核心包的布尔方法和变量的命名约定 . 使用is前缀解决了选择错误的布尔名称(如status或flag)的常见问题.isStatus或isFlag根本不适合,程序员被迫选择更有意义的名字.

布尔变量的setter方法必须设置前缀,如下所示:

void setFound(boolean isFound);
Run Code Online (Sandbox Code Playgroud)

is前缀有一些替代方案,在某些情况下更适合.这些是,可以和应该前缀:

boolean hasLicense(); 
boolean canEvaluate(); 
boolean shouldAbort = false;
Run Code Online (Sandbox Code Playgroud)

  • 所以如果有布尔属性`hasData`,那么setter会是什么样子?当然,`setData(bool hasData)`看起来非常错误...... (6认同)
  • @FranzB.我用setHasData(...) (5认同)
  • setter 很简单,对于 getter,我必须使用“boolean isIsCurrent(){...}”,否则用于反序列化对象的框架会抱怨“找不到属性 isCurrent”的 getter。 (3认同)
  • @VCD“似乎 has、can、should 前缀不是规范的一部分” - 因此,这就是盲目尝试遵循这些类型规范的全部问题。它们通常只涵盖基本场景。最重要的是,使用直观的变量和方法名称,这些名称有意义并且以后维护此代码的人会理解。常识在这里大有帮助。 (3认同)
  • 对于那些想要遵循JavaBeans规范的人,似乎“具有”,“可以”,“应该”前缀不是该规范的一部分。参考[JavaBeans Specification 1.01](http://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html)第8.3节。 (2认同)

Sea*_*oyd 64

对于一个名为的字段isCurrent,正确的getter/setter命名是setCurrent()/ isCurrent()(至少是Eclipse认为的那样),这是非常混乱的,可以追溯到主要问题:

不应该首先调用您的字段isCurrent. 动词和动词不适合表示对象的状态.改为使用形容词,突然间你的getter/setter名称会更有意义:

private boolean current;

public boolean isCurrent(){
    return current;
}

public void setCurrent(final boolean current){
    this.current = current;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果布尔值不是原语怎么办?如果是布尔值应该是get还是? (4认同)
  • @Arun我认为它应该是set/get而不是set /是因为Boolean是一个对象而不是primitive,因为它有3个stats,false,true或null. (3认同)
  • 不,这样的方法可能返回null,这将导致NullPointerException。但我会尽量避免首先返回Boolean (2认同)

Jim*_*mmy 7

数据类型Boolean的setter/getter方法和类中的boolean之间有一个值得注意的点(对于pojo/entity)。

  • 对于布尔值和布尔值,setter方法应为setXXX(),但getter方法应分别为getXXX()isXXX()

例子:

(a)如果属性定义为布尔值

private Boolean check;
Run Code Online (Sandbox Code Playgroud)

setter/getter 方法

public Boolean getCheck() {   // getXXX()
    return check;
}

public void setCheck(Boolean check) {
    this.check = check;
}
Run Code Online (Sandbox Code Playgroud)

(b)如果属性定义为布尔值

private boolean check;
Run Code Online (Sandbox Code Playgroud)

setter/getter 方法

   public boolean isCheck() {   // isXXX()
        return check;
    }
    public void setCheck(boolean check) {
        this.check = check;
    }
Run Code Online (Sandbox Code Playgroud)


mik*_*iku 6

相信它将是:

void setCurrent(boolean current)
boolean isCurrent()
Run Code Online (Sandbox Code Playgroud)

  • @Clement约定在您依赖使用这些约定的工具时确实很重要。JavaBeans是在大量库(JSP / JSF / Spring / Groovy仅举几例)中得到广泛支持的约定。违反约定意味着打破这些库的工作方式。 (4认同)
  • 我喜欢那个约定,但约定并不重要。最重要的是坚持你选择的那个。 (2认同)

Chr*_*len 5

也许是时候开始修改这个答案了吗?就我个人而言,我会投赞成票setActive()unsetActive()(根据上下文,替代方案可以是setUnActive(),,等等),因为“ setActive”意味着您始终都在激活它,而您并不需要。说“ setActive”有点反直觉,但实际上删除了活动状态。notActive()disable()

另一个问题是,您不能以CQRS方式专门监听SetActive事件,您需要监听'setActiveEvent'并确定内部的监听器是否实际上被设置为活动状态。或者,当然可以确定在调用时要调用哪个事件,setActive()但是那违反了关注分离原则。

对此很好的阅读是Martin Fowler的FlagArgument文章:http ://martinfowler.com/bliki/FlagArgument.html

但是,我来自PHP背景,并且越来越多地采用这种趋势。不确定Java开发对这有多大帮助。