Соглашение об именах для получателей / установщиков в Java - PullRequest
31 голосов
/ 01 июня 2010

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

private int xIndex;

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

getXindex()
setXindex(int value)

или

getxIndex()
setxIndex(int value)

РЕДАКТИРОВАТЬ: или

getXIndex()
setXIndex(int value);

Ответы [ 7 ]

33 голосов
/ 22 апреля 2013

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

getxIndex()
setxIndex(int value)

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

6 голосов
/ 18 марта 2018

В соответствии с спецификацией 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 Most скорее всего, не имеет ничего общего с SETI . Используя единственное действительное измерение качества кода (WTFs в минуту), Я считаю, что это плохой код .

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

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

Точно, какое использование всех имен в верхнем регистре это относится, мне неясно. Имена полей должны, согласно конвенция , верблюдов. Похоже на то для меня, что мы генерируем нетрадиционные имена методов для поддержки нетрадиционных имен полей, как это решено Документ старше 20 лет.

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

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

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

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

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

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

Любые комментарии, касающиеся спецификации JavaBeans, должны, согласно самой спецификации, быть отправлены java-beans@java.sun.com.

4 голосов
/ 01 июня 2010

Должно быть:

getXIndex()
setXIndex(final int xIndex)
1 голос
/ 01 июня 2010

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

0 голосов
/ 22 мая 2016

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

getxIndex()
setxIndex(int value)

Что соответствует спецификации API Java-бобов.

0 голосов
/ 23 февраля 2015

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

0 голосов
/ 01 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...