Java: как назвать логические свойства
У меня был небольшой сюрприз в веб-приложении, где я использую EL на страницах.jsp.
Я добавил логическое свойство и почесал голову, потому что назвал логическое "isDynamic", поэтому я мог написать это:
<c:if test="${page.isDynamic}">
...
</c:if>
Что мне легче читать, чем:
<c:if test="${page.dynamic}">
...
</c:if>
Однако.jsp не удалось скомпилировать с ошибкой:
javax.el.PropertyNotFoundException: Property 'isDynamic' not found on type com...
Я выяснил, что моя IDE (и мне потребовалось некоторое время, чтобы заметить это), когда генерировал геттер, сгенерировал метод с именем:
isDynamic()
вместо:
getIsDynamic()
Как только я вручную заменил isDynamic() на getIsDynamic(), все работало нормально.
Итак, у меня есть два вопроса:
плохо ли начинать имя логического свойства с "is"?
Плохо это или нет, не сделал ли IntelliJ ошибку здесь, автоматически сгенерировав метод с именем isDynamic вместо getIsDynamic?
4 ответа
Чувствительная тема, но на мой взгляд это плохо. Имя переменной должно обозначать не вопрос, а утверждение. Например
pageIsDynamic
,dynamical
или жеdynamicallyGenerated
, Однако для этого нет четкого соглашения о кодировании. До тех пор, пока вы будете последовательны в кодировании, в любом случае это не навредит.Нет, это не так. Спецификация Javabean гласит, что разрешено использовать префикс булевых имен методов получения с помощью
is
также. Как правило, предпочтительнее вышеget
, Как и любой другой достойный IDE, IntellIJ просто придерживается этой спецификации. Eclipse и Netbeans сделали бы то же самое. Вот выдержка из главы 8.3.2:
8.3.2 Булевы свойства
Кроме того, для логических свойств мы разрешаем методу getter соответствовать шаблону:
public boolean is<PropertyName>();
это
“is<PropertyName>”
метод может быть предоставлен вместо“get<PropertyName>”
метод, или он может быть предоставлен в дополнение к“get<PropertyName>”
метод.В любом случае, если
“is<PropertyName>”
метод присутствует для логического свойства, то мы будем использовать“is<PropertyName>”
метод для чтения значения свойства. Пример логического свойства может быть:public boolean isMarsupial(); public void setMarsupial(boolean m);
isDynamic() обычно является логическим методом получения.
public boolean isDynamic() {
return dynamic;
}
в вашем шаблоне вы можете использовать:
<c:if test="${dynamic}">
...
</c:if>
Более типично называть свойство без "is", и у метода доступа должно быть "is". Вы, конечно, можете изменить то, что генерирует ваша IDE, и использовать метод getIsDynamic(), если вам это понятнее.
Поскольку в Java у вас нет конфликта между именами переменных и методами, можно сказать, что нормально иметь isDynamic()
метод, который возвращает, если isDynamic
является true
, Или, по крайней мере, это хорошо, если "динамичность" на самом деле является реальным атрибутом объекта, а не просто логическим значением, которое вам нужно.
Например verbose
является логическим значением, которое обычно не является атрибутом объекта, поэтому наличие isVerbose()
метод был бы плохой идеей (если это не Console
учебный класс).
Наличие логического имени isDynamic
хорошая выразительная идея Это говорит о том, что переменная bool
без каких-либо дополнительных усилий.