Eg.

boolean isCurrent = false;

你怎么命名它的getter和setter?


当前回答

我相信会是:

void setCurrent(boolean current)
boolean isCurrent()

其他回答

假设你有

boolean active;

Accessors方法

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

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

另请参阅

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

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

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

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

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

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

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

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

强烈建议使用形容词来命名布尔字段。如果您使用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;
    }
}

数据类型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;
    }