Допустимые имена JavaBeans для логических методов получения - PullRequest
57 голосов
/ 28 апреля 2009

Я знаю, что большинство имен переменных будут работать с "is", например isBlue(), но is "также имеет" действительный префикс, например hasProperty()?

Ответы [ 3 ]

71 голосов
/ 28 апреля 2009

В соответствии со спецификацией JavaBeans , раздел 8.3.2:

Логические свойства
Кроме того, для логические свойства, мы разрешаем геттер метод для сопоставления с шаблоном:

public boolean is<PropertyName>();

это "isPropertyName" метод может быть предоставляется вместо «get<PropertyName>», или может предоставляется в дополнение к Метод "get<PropertyName>". В любом случай, если метод is<PropertyName> присутствует для логического свойства тогда мы будем использовать "is<PropertyName>" метод для чтения значения свойства. Пример логического свойства может быть:

public boolean isMarsupial (); public void setMarsupial (логическое значение m);

Другими словами, если что-то не изменилось с тех пор, has, боюсь, не является действительным префиксом: (

Возможно, что некоторые инструменты и библиотеки в любом случае распознают такие свойства, но полагаться на это не стоит.

9 голосов
/ 25 декабря 2010

Джон Скит отметил, что согласно спецификации это недействительно. Также, 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.

4 голосов
/ 28 апреля 2009

Это несколько субъективно, но да, я бы сказал, "has" - совершенно правильный префикс для логического свойства.

edit в вопросе, который был задан, не упоминалась спецификация javabeans, и поэтому мой ответ не затрагивал этот аспект вопроса. Отсюда и ответ выше.

...