我知道大多数变量名称都适用于“是”,例如isBlue()
,但“has”也是有效前缀,例如hasProperty()
?
答案 0 :(得分:71)
根据JavaBeans specification第8.3.2节:
布尔属性
另外,为 布尔属性,我们允许一个getter 匹配模式的方法:
public boolean is<PropertyName>();
这个 “
isPropertyName
”方法可能是 提供而不是 “get<PropertyName>
”方法,或者它可以 除了a之外还提供 “get<PropertyName>
”方法。在任何一个 case,如果是is<PropertyName>
方法 然后出现一个布尔属性 我们将使用“is<PropertyName>
” 读取属性值的方法。一个 示例布尔属性可能是:public boolean isMarsupial(); public void setMarsupial(boolean m);
换句话说,除非事情发生变化,否则has
不是我担心的有效前缀:(
某些工具和库可能会识别出这些属性,但依赖它并不是一个好主意。
答案 1 :(得分: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());
}
类Item
应该是一个带有foo属性和getter的javabean。如果read方法是null
,则表示根据javabeans规范没有定义有效的getter。
答案 2 :(得分:4)
这有些主观,但是,我会说“has”是布尔属性的完全有效前缀。
编辑问题,如所提到的,没有提到javabeans规范,所以我的答案没有解决问题的这个方面。因此上面的答案。