Допустимые имена JavaBeans для логических методов получения
Я знаю, что большинство имен переменных будут работать с "is", например isBlue()
, но "имеет" также действительный префикс, как hasProperty()
?
3 ответа
Согласно разделу спецификации JavaBeans 8.3.2:
Булевы свойства
Кроме того, для логических свойств мы разрешаем методу getter соответствовать шаблону:
public boolean is<PropertyName>();
Это "
isPropertyName
"метод может быть предоставлен вместо"get<PropertyName>
"метод, или он может быть предоставлен в дополнение к"get<PropertyName>
"метод. В любом случае, еслиis<PropertyName>
метод присутствует для логического свойства, тогда мы будем использовать "is<PropertyName>
"метод для чтения значения свойства. Пример логического свойства может быть:public boolean isMarsupial (); public void setMarsupial (логическое значение m);
Другими словами, если что-то не изменилось с тех пор, has
Боюсь, неправильный префикс:(
Возможно, что некоторые инструменты и библиотеки в любом случае распознают такие свойства, но полагаться на это не очень хорошая идея.
Джон Скит отметил, что согласно спецификации это недействительно. Также, canX
, shouldX
и лайки не действительны. Что довольно неудачно. Вот способ проверить, имеет ли данное свойство действительный метод получения:
BeanInfo info = Introspector.getBeanInfo(Item.class);
Item itm = new Item();
for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
System.out.println(pd.getName() + " : " + pd.getReadMethod());
}
Класс Item
должен быть javabean со свойством foo и получателем. Если метод чтения null
, это означает, что нет действительного геттера, определенного в соответствии со спецификацией javabeans.
Это несколько субъективно, но да, я бы сказал, что has имеет совершенно правильный префикс для логического свойства.
Отредактируйте вопрос, как было сказано, не упомянув спецификацию javabeans, и поэтому мой ответ не затрагивал этот аспект вопроса. Отсюда и ответ выше.