Я знаю, что большинство имен переменных будут работать с "is", например isBlue()
, но есть "имеет" также действительный префикс, например hasProperty()
?
Действительные имена JavaBeans для булевых методов получения
Ответ 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, и поэтому мой ответ не касался этого аспекта вопроса. Отсюда и ответ выше.