Подтвердить что ты не робот

Соглашение об именах для getters/seters в Java

если у меня есть следующий частный член:

private int xIndex;

Как мне назвать мой приемник/сеттер:

getXindex()
setXindex(int value)

или

getXindex()
setXindex(int value)

EDIT: или

getXIndex()
setXIndex(int value);

?

4b9b3361

Ответ 1

Правильный ответ

getxIndex()
setxIndex(int value)

если вы хотите, чтобы они использовались в качестве свойств в соответствии с разделом 8.8: использование заглавных букв в именах of the спецификации API JavaBeans (например, получить к ним доступ через $ {object.xIndex} в JSP.

Ответ 2

В соответствии со спецификацией JavaBeans API от 1997 года это должно быть так, как описывает Томас Эйнваллер.

private int xIndex;
public int getxIndex() { return xIndex; }
public void setxIndex(int xIndex) { this.xIndex = xIndex; }

К сожалению, getx и setx не являются словами, поэтому в редких случаях код был сгенерирован IntelliJ. получает предупреждение от IntelliJ. Таким образом, хотя это соответствует спецификации JavaBeans, оно нарушает соглашение для называя метод. В редком случае, когда это сформирует слово или аббревиатуру, это будет дезинформативно, например, метод setiMessage наиболее скорее всего, не имеет ничего общего с SETI. Используя единственное действительное измерение качества кода (WTFs в минуту), Я считаю, что это плохой код.

Все сводится к этому предложению спецификации JavaBeans:

Однако для поддержки случайного использования всех заглавных имен мы проверяем, являются ли первые два символа имени   как в верхнем регистре, так и в таком случае оставьте это в покое.

Мне не совсем понятно, к какому типу относятся все имена в верхнем регистре. имена полей должны, согласно конвенция, будь верблюдом. Это выглядит для меня, что мы генерируем нетрадиционные имена методов для поддержки нетрадиционных имен полей, как это решено 20+ летний документ.

Следует также отметить, что, хотя это кажется подавляющей поддержкой спецификации JavaBeans в инструментах, это не исключительно используется. Например. Kotlin не распознает xIndex как свойство в приведенном выше примере. И наоборот, Свойство Kotlin var xIndex = 0 приведет к появлению методов Java getXIndex и setXIndex. Это похоже на ошибку в соответствии с поддержкой JetBrains, но я не вижу, как они могут это исправить, не внося серьезных изменений.

Некоторые инструменты, которые поддерживают спецификацию JavaBeans, не всегда делают это, например, Джексон и Swagger Code Generator были исправлены, чтобы соответствовать ему. Хотя IntelliJ генерирует средства доступа в соответствии со спецификацией JavaBeans, пример example в документации отличается от этого. Возможно, потому что люди не знают о стандарте и, естественно, предпочитают обычное соглашение об именах методов.

Итак, когда мы должны следовать спецификации JavaBeans? Когда имена свойств должны выводиться средствами доступа с помощью инструментов, которые полагаться на этот стандарт, тогда мы можем захотеть его использовать. Например, Джексон будет полагаться на свойство xIndex, доступ к которому осуществляется с помощью методов getxIndex и setxIndex, если только мы не используем аннотации.

Когда мы должны избегать этого стандарта? Согласно моей рекомендации: когда код должен быть прочитан и понят людьми. Потому что не использовать правильную верблюжью оболочку при именовании методов дезинформативно.

Если бы я был по-своему, мы бы использовали обычные соглашения об именах, то есть getXIndex и setXIndex. Но, учитывая состояние Из лучших вещей, которые я вижу, предлагает @vaxquis:

Назовите свое поле "indexX" или как-нибудь еще, ваша проблема решена... не переусердствуйте вещи, даже если setxIndex   это правильный путь для Beans, метод setxIndex увеличивает коэффициент WTF кода, не давая вам   ничего взамен.

Любые комментарии, касающиеся спецификации JavaBeans, должны, согласно самой спецификации, быть отправлены [email protected]

Ответ 3

Должно быть:

getXIndex()
setXIndex(final int xIndex)

Ответ 4

Методы должны быть глаголами, в смешанном случае с первой строчной буквой, с первой буквой каждого заглавного слова.

Ответ 5

Вы должны использовать Introspector.decapitalize из пакета java.beans, и у вас нет проблем, поскольку он совместим с java-правилами.

Ответ 6

Eclipse ide автоматически генерирует сеттеры и геттеры как:

getxIndex()
setxIndex(int value)

Что соответствует спецификации API java beans.

Ответ 8

Я думаю, что getXindex() - лучший способ. Геттер должен начинаться с "get", за которым следует имя участника, с его заглавной буквой. Также последние соглашения, о которых я слышал, говорят, что мы должны избегать нескольких заглавных букв один за другим. Например, getHTMLtooltip неверно. он должен быть getHTMLtooltip. Также вы должны попытаться сделать все ваши члены final, и не должно быть необходимости в сеттерах, так как класс будет неизменным;)