Подтвердить что ты не робот

Действительные имена JavaBeans для булевых методов получения

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

4b9b3361

Ответ 1

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

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

public boolean is<PropertyName>();

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

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

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

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

Ответ 2

Джон Скит отметил, что в соответствии со спецификацией он недействителен. Кроме того, canX, shouldX и подобные недопустимы. Это довольно неудачно. Вот способ проверить, имеет ли данное свойство действительный getter:

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 и getter. Если метод чтения null, это означает, что нет допустимого геттера, определенного в соответствии со спецификацией javabeans.

Ответ 3

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

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