是一个以“前缀”为前缀的布尔属性名称;是";仍然是有效的javabean吗?

是一个以“前缀”为前缀的布尔属性名称;是";仍然是有效的javabean吗?,java,javabeans,lombok,Java,Javabeans,Lombok,我只是注意到一些我不知道的事情 private boolean isCertified; public boolean isCertified() { return isCertified; } public void setCertified(boolean certified) { isCertified = certified; } Intellij生成了以下getter和setter。顺便说一下,Lombok生成了相同类型的getter和sett

我只是注意到一些我不知道的事情

  private boolean isCertified;

  public boolean isCertified() {
    return isCertified;
  }

  public void setCertified(boolean certified) {
    isCertified = certified;
  }
Intellij生成了以下getter和setter。顺便说一下,Lombok生成了相同类型的getter和setter

我本以为会发生这样的事情:

  private boolean isCertified;

  public boolean isIsCertified() {
    return isCertified;
  }

  public void setIsCertified(boolean certified) {
    isCertified = certified;
  }
  private boolean certified;

  public boolean isCertified() {
    return certified;
  }

  public void setCertified(boolean certified) {
    certified = certified;
  }
这就是为什么我通常不在布尔属性前面加上
ìs
,尽管我认为属性名变得更可读

我通常会写这样的东西:

  private boolean isCertified;

  public boolean isIsCertified() {
    return isCertified;
  }

  public void setIsCertified(boolean certified) {
    isCertified = certified;
  }
  private boolean certified;

  public boolean isCertified() {
    return certified;
  }

  public void setCertified(boolean certified) {
    certified = certified;
  }

所以我想知道:

  • 具有名为
    isXXX
    的属性,并且getter是
    isXXX
    而不是
    isIsXXX
    :它是有效的Java Bean定义吗?

  • 是否还有其他类似的隐藏JavaBean角落案例,我可能想知道,以提高代码的可读性?


谢谢

你的私人字段叫什么其实并不重要;这就是为什么你的二传手和接球手在那里

private boolean certified;

public boolean isCertified() {
    return certified;
}

public void setCertified(boolean certified) {
    this.certified = certified;
}
没关系。
关于变量名称的更多信息,您可以查看。

AFAIK,字段的命名模式不是JavaBeans规范的一部分

JavaBeans规范(除其他外)指定了“属性”概念

类的属性由类的方法(以特定模式命名)标识

字段是不相关的。事实上,属性甚至不必有字段

也就是说,在属性名称之后命名字段仍然是一种好的做法。需要访问字段的工具(例如IDE中的重构支持)正确处理字段的可能性更大

有一个名为isXXX的属性和一个名为isXXX而不是isIsXXX的getter:这是一个有效的JavaBean定义吗

否,属性
isXXX
的getter需要
isIsXXX()
(对于布尔值)或
getIsXXX()

但情况又是相反的

如果您有一个方法:

boolean isXyz()
这样就有了一个可读的属性
xyz

如果你有办法

boolean isIsXyz()
然后您就有了一个可读的属性
isXyz

有关更多信息,请查看类、或JavaBeans规范:


因为Java bean的属性通常只是由它们的getter和setter方法定义的(而实际的,很可能是私有的,成员变量被忽略了),是的,这很好。尽管我仍然将布尔成员称为certified,但这是风格/品味的问题。

当您从IDE(许多情况下是Eclipse)为布尔变量生成setter/getter时,这是创建setter和getter的标准方式。它是一个完美有效的JavaBean定义。事实上,当您使用像JSF这样的框架时,使用setter/getter传递值,定义布尔变量并使用生成的setter/getter就成了一种强制要求