Java: как назвать логические свойства - PullRequest
16 голосов
/ 31 мая 2010

У меня был небольшой сюрприз в веб-приложении, где я использую 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 ]

27 голосов
/ 31 мая 2010
  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);
10 голосов
/ 31 мая 2010

isDynamic () - это, как правило, логический метод получения.

public boolean isDynamic() {
  return dynamic;
}

в вашем шаблоне вы можете использовать:

<c:if test="${dynamic}">
 ...
</c:if>
1 голос
/ 31 мая 2010

Поскольку в Java нет конфликта между именами переменных и методом, можно сказать, что нормально иметь метод isDynamic(), который возвращает, если isDynamic равно true. Или, по крайней мере, это хорошо, если «динамичность» на самом деле является реальным атрибутом объекта, а не просто логическим значением, которое вам нужно.

Например, verbose - это логическое значение, которое обычно не является атрибутом объекта, поэтому использование метода isVerbose() было бы плохой идеей (если это не класс Console).

Наличие логического значения с именем isDynamic - хорошая выразительная идея. Это говорит о том, что переменная bool без каких-либо дополнительных усилий.

1 голос
/ 31 мая 2010

Более типично называть свойство без «is», и у аксессора должно быть «is». Вы, конечно, можете изменить то, что генерирует ваша IDE, и использовать getIsDynamic (), если вам это понятнее.

...