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 без каких-либо дополнительных усилий.