【问题标题】:Valid JavaBeans names for boolean getter methods布尔 getter 方法的有效 JavaBeans 名称
【发布时间】:2009-04-28 18:30:48
【问题描述】:

我知道大多数变量名都可以使用“is”,例如isBlue(),但“has”也是一个有效的前缀,例如hasProperty()

【问题讨论】:

  • 我已经删除了主观标签,因为我认为它不合适(原因我已经概述)。如果原作者能够准确地阐明需要什么,如果事实证明他并不真正遵循 JavaBeans 命名约定的严格有效性,我们可以将其放回原处。

标签: java boolean naming-conventions javabeans


【解决方案1】:

根据JavaBeans specification 8.3.2 节:

布尔属性
此外,对于 布尔属性,我们允许一个 getter 匹配模式的方法:

public boolean is<PropertyName>();

这 “isPropertyName”方法可能是 提供而不是 "get<PropertyName>" 方法,也可以 除了提供一个 “get<PropertyName>”方法。在任一 情况下,如果 is<PropertyName> 方法 然后存在布尔属性 我们将使用“is<PropertyName>” 方法来读取属性值。一个 示例布尔属性可能是:

公共布尔 isMarsupial(); public void setMarsupial(boolean m);

换句话说,除非从那以后发生了一些变化,否则has 恐怕不是一个有效的前缀:(

有可能一些工具和库无论如何都会识别这些属性,但依赖它并不是一个好主意。

【讨论】:

  • 这个答案很有意义,但我想说这个问题需要重新措辞,以提到这个问题是特定于 javabeans 规范的。单独的标签不能很好地传达这些信息,一般来说,根据问题本身,“有”是一个完全可以接受的前缀。
  • 主题行使 IMO 非常清楚 - 他询问变量名称是否会“工作”这一事实表明这里涉及的不仅仅是个人偏好。
  • 为了与其他属性类型保持一致,同时仍保留我更喜欢的有意义的名称,例如hasParent 和 getHasParent() 分别作为字段和属性名称,查看引用的规范仍然是完全有效的。将布尔 getter 命名为“isX()”在语义上并不总是合适的,我更喜欢冗长的代码而不是误导性/令人困惑的代码。
  • @yjo:在这种情况下我会使用isChild :) getHasParent 对我来说真的很难看 - 它不违反规范,但肯定感觉不对。
  • @JonSkeet 当然,这是对一个不需要任何特定领域上下文的示例的(糟糕的)人为尝试。我敢肯定,如果您考虑一下,您可以想出一些更好的布尔属性示例,这些示例不能最好地用“is”动词表示:)。
【解决方案2】:

Jon Skeet 指出,根据规范,它是无效的。此外,canXshouldX 等也无效。这是相当不幸的。这是一种检查给定属性是否具有有效 getter 的方法:

BeanInfo info = Introspector.getBeanInfo(Item.class);
Item itm = new Item();
for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
    System.out.println(pd.getName() + " : " + pd.getReadMethod());
}

Item 类应该是一个带有 foo 属性和一个 getter 的 javabean。如果读取的方法是null,则表示没有根据javabeans规范定义有效的getter。

【讨论】:

    【解决方案3】:

    这有点主观,但是是的,我会说“有”是布尔属性的完全有效的前缀。

    edit 所问的问题没有提到 javabeans 规范,所以我的回答没有解决问题的那个方面。因此上面的答案。

    【讨论】:

    • 这不是主观的——它是由 JavaBeans 规范决定的。
    • 但他并没有在他的问题中提到他正在寻找一个适用于 javabeans 规范的答案。
    • 主题中的“有效的 Java bean 名称”不是一个很大的线索吗?
    • @Ryan - 他是“Jon Skeet”而我们不是:-)
    • 是的,我怀疑仅凭这一事实就足以让每个人都同意他的观点。我对这个问题感到困惑,因为它不清楚,并且看不出有理由不为清楚起见编辑这个问题。哦,好吧。
    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    相关资源
    最近更新 更多