Valid JavaBeans names for boolean getter methods

给你一囗甜甜゛ 提交于 2019-11-27 18:27:17
Jon Skeet

According to the JavaBeans specification section 8.3.2:

Boolean properties
In addition, for boolean properties, we allow a getter method to match the pattern:

public boolean is<PropertyName>();

This "isPropertyName" method may be provided instead of a "get<PropertyName>" method, or it may be provided in addition to a "get<PropertyName>" method. In either case, if the is<PropertyName> method is present for a boolean property then we will use the "is<PropertyName>" method to read the property value. An example boolean property might be:

public boolean isMarsupial(); public void setMarsupial(boolean m);

In other words, unless something has changed since then, has isn't a valid prefix I'm afraid :(

It's possible that some tools and libraries will recognise such properties anyway, but it's not a good idea to rely on it.

Jon Skeet noted that according to the specification it is not valid. Also, canX, shouldX, and the likes are not valid. Which is rather unfortunate. Here is a way to check whether a given property has a valid getter:

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

The class Item should be a javabean with a foo property, and a getter. If the read method is null, it means there is no valid getter defined according to the javabeans spec.

This is somewhat subjective, but yes, I would say "has" is a perfectly valid prefix for a Boolean property.

edit the question, as asked, did not mention the javabeans specification and so my answer did not address that aspect of the question. Hence the answer above.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!