布尔 getter 方法的有效 JavaBeans 名称

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


答案 1

根据 JavaBeans 规范 8.3.2 节:

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

public boolean is<PropertyName>();

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

公共布尔值 isMarsupial();公共 void setMarsupial(布尔 m);

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

无论如何,某些工具和库都有可能识别此类属性,但依赖它不是一个好主意。


答案 2

Jon Skeet指出,根据规范,这是无效的。此外,、 、 和类似项均无效。这是相当不幸的。以下是检查给定属性是否具有有效 getter 的方法:canXshouldX

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

该类应该是具有 foo 属性的 javabean 和 getter。如果读取方法是 ,则表示没有根据 javabeans 规范定义的有效 getter。Itemnull