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