66

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

4

3 回答 3

83

根据JavaBeans 规范第 8.3.2 节:

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

public boolean is<PropertyName>();

isPropertyName可以提供 该“ ”方法来代替“ get<PropertyName>”方法,或者可以在“ ”方法之外提供该“ get<PropertyName>”方法。在任何一种情况下,如果该is<PropertyName>方法存在于布尔属性,那么我们将使用 " is<PropertyName>" 方法来读取属性值。一个示例布尔属性可能是:

公共布尔 isMarsupial(); 公共无效 setMarsupial(boolean m);

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

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

于 2009-04-28T18:37:59.077 回答
10

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。如果 read 方法是null,则表示没有根据 javabeans 规范定义的有效 getter。

于 2010-12-25T18:40:05.017 回答
4

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

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

于 2009-04-28T18:32:57.513 回答