布尔getter方法的有效JavaBeans名称

58 java boolean naming-conventions javabeans

我知道大多数变量名都适用于"是",例如isBlue(),但是"has"也是一个有效的前缀,比如hasProperty()

Jon*_*eet 72

根据JavaBeans规范第8.3.2节:

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

public boolean is<PropertyName>();

isPropertyName可以提供 该" "方法而不是" get<PropertyName>"方法,或者除了" get<PropertyName>"方法之外还可以提供该方法.在任何一种情况下,如果该is<PropertyName>方法存在于布尔属性,那么我们将使用" is<PropertyName>"方法来读取属性值.布尔属性的示例可能是:

public boolean isMarsupial(); public void setMarsupial(boolean m);

换句话说,除非事情发生变化,否则has不是一个有效的前缀我害怕:(

这可能是一些工具和库无论如何都会认识到这种特性,但它不依赖于它是一个好主意.


Boz*_*zho 9

Jon Skeet指出,根据规范它是无效的.此外,canX,shouldX,和喜欢是无效的.这是相当不幸的.这是一种检查给定属性是否具有有效getter的方法:

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

该类Item应该是具有foo属性和getter的javabean.如果是read方法null,则表示根据javabeans规范没有定义有效的getter.


Rya*_*ill 4

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

按照要求编辑问题,没有提到 javabeans 规范,所以我的回答没有解决问题的这方面。于是就有了上面的答案。

  • 它不是主观的——它是由 JavaBeans 规范决定的。 (9认同)
  • 主题中的“有效的 java beans 名称”不是一个很大的线索吗? (7认同)
  • @Ryan - 他是“Jon Skeet”而我们不是:-)是有原因的 (4认同)
  • 是的,我怀疑仅凭这一事实就足以让每个人都同意他的观点。我对这个问题感到困惑,因为它不清楚,并且看不出有什么理由不为了清晰起见而编辑问题。那好吧。 (2认同)