对于布尔型字段,其getter / setter的命名约定是什么?


178

例如。

boolean isCurrent = false;

您如何称呼它的吸气剂和吸气剂?


2
我假设您是在指JavaBean,在这种情况下,@ Jigar Joshi的回答是正确的。但是,如果您要询问通用的getter / setter,则唯一的惯例是方法包含字段的名称,并且getter不接受任何参数并返回值,setter接受一个参数并且不返回值或返回对象本身。请参阅Buffer作为获取/设置方法的另一种方法的示例。
彼得·劳瑞

Answers:


254

假设你有

boolean active;

访问器方法将是

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

public void setActive(boolean active){this.active = active;}

也可以看看


9
您能否指出Sun的代码约定中专门包含布尔型getter名称的部分?我找不到。
康斯坦丁·佩莱佩林

3
我有一个名为的 布尔hasCustomName字段,现在我应该为它的gettersetter方法命名吗?是setHasCustomName[setter]hasCustomName[getter]好吗?
哈迪

@Hadi只需将变量命名为“ customerName”,并为其生成getter n setter。预期的吸气和public boolean isCustomerName(){return this.customerName;} public void setCustomerName(boolean customerName){this.customerName= customerName;}
吹毛求疵

1
我们如何从自定义名称转换为客户名称?;)
Kartik Chugh

1
@Assegd将其命名为“ customerName”或“ customName”是令人困惑的,并不表示它是布尔值。看到变量,我希望它包含一个名称。在这种情况下,应将其称为“ hasCustomName” IMO。
弥敦道

83

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

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

    isSetisVisibleisFinishedisFoundisOpen

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

布尔变量的设置方法必须具有如下设置的前缀:

void setFound(boolean isFound);

在某些情况下,可以使用is前缀替代一些前缀。这些是具有,可以并且应该前缀:

boolean hasLicense(); 
boolean canEvaluate(); 
boolean shouldAbort = false;

7
因此,如果存在boolean属性hasData,则setter的外观如何?最肯定的是,setData(bool hasData)我看上去很不对劲……
Franz B.

7
@FranzB。我会用setHasData(...)
user362178 '16

2
对于那些谁想要如下的JavaBeans specifcation,似乎hascanshould前缀是不是规范的一部分。参考JavaBeans Specification 1.01第8.3节。
VCD

@安德鲁嗨。当我在变量中使用'is'前缀并从数据中的js文件发送该变量的值时,它总是给我该值为false。而且,如果我删除“ is”前缀,那么它绝对可以正常工作。可能是什么原因呢?提前致谢。
Me_developer

1
设置器很简单,因为我必须使用getter boolean isIsCurrent(){...}否则将用于反序列化对象的框架抱怨了getter not found for property isCurrent
Maurizio Lo Bosco

67

对于名为的字段isCurrent,正确的getter / setter命名为setCurrent()/isCurrent()(至少是Eclipse所认为的),这非常令人困惑,可以追溯到主要问题:

不应首先调用您的字段isCurrent Is是动词,动词不适合表示对象的状态。改用形容词,突然您的getter / setter名称会更有意义:

private boolean current;

public boolean isCurrent(){
    return current;
}

public void setCurrent(final boolean current){
    this.current = current;
}

4
如果布尔值不是原始值怎么办?如果是布尔值,应该是get还是is?
阿伦(Arun)

2
不,这样的方法可能返回null,这将导致NullPointerException。但我会尽量避免首先返回布尔值
肖恩·帕特里克·弗洛伊德

3
@Arun我认为应该设置/获取它,如果因为布尔是一个对象而不是原始对象,则应该设置/获取它,因为它具有3个状态,即false,true或null。
Al-Mothafar '18

1
的IntelliJ默认使用get检索时前缀BooleanVS isboolean
jocull

1
@jocull,这是正确的行为,根据JavaBeans规范
Sean Patrick Floyd

6

相信它将是:

void setCurrent(boolean current)
boolean isCurrent()

1
我喜欢那个约定,但是约定并不重要。最重要的是坚持使用您选择的那个。
克莱门特·赫雷曼

4
当您依赖使用这些约定的工具时,@ Clement约定确实很重要。JavaBeans是在大量库(JSP / JSF / Spring / Groovy仅举几例)中得到广泛支持的约定。违反约定意味着打破这些库的工作方式。
肖恩·帕特里克·弗洛伊德

1
@Sean Right,但框架依赖于约定的框架除外。在这种情况下,约定是由框架强制执行的,因此您无需选择任何内容。好话
克莱门特·赫雷曼

5

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

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

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

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


-1
private boolean current;

public void setCurrent(boolean current){
    this.current=current;
}

public boolean hasCurrent(){
    return this.current;
}

3
目前有什么?我认为has用于BO或经过某种处理的此类服务用于POJO时is。并请添加一些有关您的答案的描述。
Al-Mothafar '18

-3
Setter: public void setCurrent(boolean val)
Getter: public boolean getCurrent()

对于布尔值,您还可以使用

public boolean isCurrent()

11
因为OP提出了有关布尔值的问题。带有“ get”前缀的getter永远不会用于布尔值(读:应该)。
哈罗德2014年

-4

作为二传手,如何:

// setter
public void beCurrent(boolean X) {
    this.isCurrent = X;
}

要么

// setter
public void makeCurrent(boolean X) {
    this.isCurrent = X;
}

我不确定这些命名是否对以英语为母语的人有意义。


1
他们并不真正使培训就业处
Yannjoel

但听起来在语音上可能具有某些特性的希望:)
seba.wagner
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.