Допустимые имена 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, и поэтому мой ответ не затрагивал этот аспект вопроса. Отсюда и ответ выше.

Другие вопросы по тегам