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不是一个有效的前缀我害怕:(
这可能是一些工具和库无论如何都会认识到这种特性,但它不依赖于它是一个好主意.
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.
这有点主观,但是,是的,我想说“has”是布尔属性的完全有效的前缀。
按照要求编辑问题,没有提到 javabeans 规范,所以我的回答没有解决问题的这方面。于是就有了上面的答案。