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(), все работало нормально.

Итак, у меня есть два вопроса:

  1. плохо ли начинать имя логического свойства с "is"?

  2. Плохо это или нет, не сделал ли IntelliJ ошибку здесь, автоматически сгенерировав метод с именем isDynamic вместо getIsDynamic?

4 ответа

Решение
  1. Чувствительная тема, но на мой взгляд это плохо. Имя переменной должно обозначать не вопрос, а утверждение. Например pageIsDynamic, dynamical или же dynamicallyGenerated, Однако для этого нет четкого соглашения о кодировании. До тех пор, пока вы будете последовательны в кодировании, в любом случае это не навредит.

  2. Нет, это не так. Спецификация 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 без каких-либо дополнительных усилий.

Другие вопросы по тегам