布局属性名称前缀为“is”仍然是有效的Java Bean吗?

时间:2013-06-12 13:12:39

标签: java javabeans lombok

我刚注意到一些我不知道的事情。

  private boolean isCertified;

  public boolean isCertified() {
    return isCertified;
  }

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

Intellij已生成以下getter和setter。顺便说一下,龙目岛产生了同样的吸气剂和固定剂。

我本来期望的是:

  private boolean isCertified;

  public boolean isIsCertified() {
    return isCertified;
  }

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

这就是为什么我通常不会将我的布尔属性作为ìs的前缀,因此我认为属性名称变得更具可读性。

我通常会这样写:

  private boolean certified;

  public boolean isCertified() {
    return certified;
  }

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

所以我想知道:

  • 拥有一个名为isXXX且getter为isXXX而不是isIsXXX的属性:它是一个有效的Java Bean定义吗?

  • 是否还有其他隐藏的Java Bean角落案例,我可能想了解这些案例以提高代码可读性?

由于

5 个答案:

答案 0 :(得分:10)

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

JavaBeans规范指定(以及其他)"属性"概念

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

这些字段无关紧要。事实上,甚至不需要成为房产的一个领域。

尽管如此,在属性名称后命名字段仍然是一个好习惯。需要访问字段的工具(例如IDE中的重构支持)将正确处理字段的可能性更大。

  

拥有一个名为isXXX的属性,而getter是isXXX而不是isIsXXX:它是一个有效的Java Bean定义吗?

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

但是反过来又是这样。

如果您有方法:

boolean isXyz()

然后你有一个可读的属性xyz

如果你有方法

boolean isIsXyz()

然后你有一个可读的属性isXyz

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

http://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html

http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138795.html

答案 1 :(得分:4)

private boolean certified;

public boolean isCertified() {
    return certified;
}

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

没关系。 有关您可以在oracle.docs

上查看的变量名称的更多信息

答案 2 :(得分:1)

私人领域的名称并不重要;这就是你的主持人和吸气者在那里的原因。

答案 3 :(得分:1)

由于Java Bean的属性通常只是由它们的getter和setter方法定义(为此目的,实际的,很可能是私有的成员变量被忽略),是的,这是完全正常的。虽然我仍然只调用布尔成员certified,但这是风格/品味的问题。

答案 4 :(得分:0)

当您从IDE(许多情况下是Eclipse)生成布尔变量的setter / getters时,这是创建setter和getter的标准方法。它是一个完美有效的Java bean定义。事实上,当您使用JSF这样的框架(其中使用setter / getters传递值)时,定义布尔变量并使用生成的setter / getter变为必需的。