10

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

  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;
  }

这就是为什么我通常不在布尔属性ìs前面加上 的原因,尽管我认为属性名称变得更具可读性。

我通常会写如下内容:

  private boolean certified;

  public boolean isCertified() {
    return certified;
  }

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

所以我想知道:

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

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

谢谢

4

5 回答 5

10

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

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

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

字段无关紧要。实际上,甚至不必为属性提供字段。

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

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

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

但又是相反的情况。

如果你有一个方法:

boolean isXyz()

那么你有一个可读的属性xyz

如果你有方法

boolean isIsXyz()

那么你有一个可读的属性isXyz

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

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

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

于 2013-06-12T13:18:16.793 回答
4
private boolean certified;

public boolean isCertified() {
    return certified;
}

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

没关系。您可以在oracle.docs上查看有关变量名称的更多信息

于 2013-06-12T13:18:14.743 回答
1

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

于 2013-06-12T13:21:21.953 回答
1

你的私有字段叫什么并不重要。这就是为什么你的 setter 和 getter 在那里。

于 2013-06-12T13:16:03.633 回答
0

When you generate setters/getters for boolean variable from IDE (Eclipse in many case), this is the standard way in which the setters and getters are created. It is a perfect valid Java bean definition. Infact when you use frameworks like JSF where values are passed using setters/getters, defining boolean variable and using the generated setter/getter becomes sort of mandatory.

于 2013-06-12T13:24:30.453 回答