Java: как назвать логические свойства
У меня просто был небольшой сюрприз в Webapp, где я использую 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 (и мне потребовалось некоторое время, чтобы заметить это), при генерации getter генерировал метод, называемый:
isDynamic()
вместо:
getIsDynamic()
Как только я вручную заменил isDynamic() на getIsDynamic(), все было нормально.
Итак, у меня есть два вопроса:
-
Неправильно ли начинать логическое имя свойства с помощью "is"?
-
Если это плохо или нет, не ошибся ли IntelliJ здесь, автогенерируя метод isDynamic вместо getIsDynamic?
Ответы
Ответ 1
-
Чувствительный субъект, но, на мой взгляд, это плохо. Имя переменной не должно означать вопрос, а утверждение. Например. pageIsDynamic
, dynamical
или dynamicallyGenerated
. Однако для этого нет четкого соглашения о кодировании. До тех пор, пока вы будете согласованы во всем кодировании, в любом случае это не повредит.
-
Нет, это не так. Javabean specification утверждает, что разрешено также префикс имен булевых геттеров с помощью is
. Обычно это предпочтительно выше get
. Как и все другие достойные IDE, IntellIJ просто придерживается этой спецификации. Eclipse и Netbeans будут делать то же самое. Здесь выдержка из главы 8.3.2:
8.3.2 Логические свойства
Кроме того, для булевых свойств мы позволяем методу геттера соответствовать шаблону:
public boolean is<PropertyName>();
Этот метод "is<PropertyName>"
может быть предоставлен вместо метода "get<PropertyName>"
или он может быть предоставлен в дополнение к методу "get<PropertyName>"
.
В любом случае, если метод "is<PropertyName>"
присутствует для логического свойства, то мы будем использовать метод "is<PropertyName>"
для чтения значения свойства. Примером логического свойства может быть:
public boolean isMarsupial();
public void setMarsupial(boolean m);
Ответ 2
isDynamic() обычно является способом логического getter.
public boolean isDynamic() {
return dynamic;
}
в шаблоне, который вы можете использовать:
<c:if test="${dynamic}">
...
</c:if>
Ответ 3
Более типично назвать свойство без "is" и позволить аксессуар иметь "есть". Вы можете, конечно, изменить то, что генерирует ваша среда IDE, и иметь "getIsDynamic()", если это более понятно для вас.
Ответ 4
Так как в Java у вас нет столкновения между именами переменных и методом, он сказал бы, что это нормально, чтобы иметь метод isDynamic()
, который возвращает if isDynamic
is true
. Или, по крайней мере, это хорошо, если "динамика" на самом деле является реальным атрибутом объекта, а не просто необходимым для вас значением булина.
Например, verbose
- это логическое значение, которое обычно не является атрибутом объекта, поэтому использование метода isVerbose()
было бы плохой идеей (если это не класс Console
).
Наличие булеана, называемого isDynamic
, является хорошей выразительной идеей. Он предлагает вам, чтобы переменная была bool
без каких-либо дополнительных усилий.