Eg.

boolean isCurrent = false;

你怎么命名它的getter和setter?


假设你有

boolean active;

Accessors方法

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

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

另请参阅

Java编程/Java Beans Java编程语言的代码约定


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

对于布尔值,也可以使用

public boolean isCurrent()

我相信会是:

void setCurrent(boolean current)
boolean isCurrent()

对于名为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;
}

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

is prefix should be used for boolean variables and methods. isSet, isVisible, isFinished, isFound, isOpen This is the naming convention for boolean methods and variables used by Sun for the Java core packages. Using the is prefix solves a common problem of choosing bad boolean names like status or flag. isStatus or isFlag simply doesn't fit, and the programmer is forced to chose more meaningful names. Setter methods for boolean variables must have set prefix as in: void setFound(boolean isFound); There are a few alternatives to the is prefix that fits better in some situations. These are has, can and should prefixes: boolean hasLicense(); boolean canEvaluate(); boolean shouldAbort = false;


也许是时候开始修改这个答案了?就我个人而言,我会投票给setActive()和unsetActive()(替代方案可以是setUnActive(), notActive(), disable()等,取决于上下文),因为“setActive”意味着你在任何时候都激活它,而你没有。说"setActive"有点违反直觉,但实际上删除了活动状态。

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

关于这一点,Martin Fowler的FlagArgument文章是一篇不错的文章:http://martinfowler.com/bliki/FlagArgument.html

然而,我有PHP的背景,看到这种趋势被越来越多地采用。不知道这与Java开发有多大关系。


private boolean current;

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

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

作为一个传达员,你可以:

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

or

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

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


它应该像其他getter一样get{varname}。将其更改为“is”并不能阻止糟糕的变量名称,只会产生另一个不必要的规则。

考虑程序生成的代码或反射派生。

这是一种无用的约定,一有机会就应该放弃。


数据类型Boolean的setter/getter方法和类中的Boolean(对于pojo/实体)之间有一个可标记的点。

对于Boolean和Boolean, setter方法都应该是setXXX(),而getter方法分别是getXXX()和isXXX()

例子:

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

private Boolean active;

setter/getter方法

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

public void setCheck(Boolean check) {
    this.check = check;
}

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

private boolean check;

setter/getter方法

   public boolean isCheck() {   // isXXX()
        return check;
    }
    public void setCheck(boolean check) {
        this.check = check;
    }

强烈建议使用形容词来命名布尔字段。如果您使用IntelliJ生成getter和setter,您将发现对于布尔字段current和isCurrent, getter都是isCurrent()。

我们可以看一下IntelliJ社区源代码,它的测试数据显示,无论你的布尔字段名是否以is开头,getter的名字都是以is开头。

class Getter {
  boolean foo;
  boolean isBar;
  boolean hasBaz;

  @java.lang.SuppressWarnings("all")
  public boolean isFoo() {
      return this.foo;
  }

  @java.lang.SuppressWarnings("all")
  public boolean isBar() {
      return this.isBar;
  }

  @java.lang.SuppressWarnings("all")
  public boolean isHasBaz() {
      return this.hasBaz;
  }
}

当你想调用getter时,当你的布尔字段名以is开头时,你会很困惑。此外,当您的同事想要获得您定义的布尔字段的值时,他们将只知道getter的名称而不是字段的名称。在这种情况下,前缀is是不必要的。

这里是另一个例子,当我从数据库检索数据来实例化一个Employee对象时,isRetired的值总是false。因为Java没有找到合适的setter,布尔字段的值总是默认值,比如false,这是不期望的。

class Employee{
    private int age;
    private boolean isRetired;

    ...
    public boolean setRetired(boolean isRetired){
        this.isRetired = isRetired;
    }
}