我知道大多数变量名都可以与“is”一起使用,例如isBlue()
,但是“has”也是一个有效的前缀,例如hasProperty()
?
3 回答
根据JavaBeans 规范第 8.3.2 节:
布尔属性
另外,对于布尔属性,我们允许一个 getter 方法来匹配模式:
public boolean is<PropertyName>();
isPropertyName
可以提供 该“ ”方法来代替“get<PropertyName>
”方法,或者可以在“ ”方法之外提供该“get<PropertyName>
”方法。在任何一种情况下,如果该is<PropertyName>
方法存在于布尔属性,那么我们将使用 "is<PropertyName>
" 方法来读取属性值。一个示例布尔属性可能是:公共布尔 isMarsupial(); 公共无效 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());
}
该类Item
应该是具有 foo 属性和 getter 的 javabean。如果 read 方法是null
,则表示没有根据 javabeans 规范定义的有效 getter。
这有点主观,但是是的,我会说“有”是布尔属性的完全有效的前缀。
按要求编辑问题,没有提到javabeans规范,所以我的回答没有解决问题的那个方面。因此上面的答案。