Соглашение об именовании для геттеров / установщиков в Java

StackOverflow https://stackoverflow.com/questions/2948083

Вопрос

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

private int xIndex;

Как я должен назвать свой получатель / установщик:

getXindex()
setXindex(int value)

или

getxIndex()
setxIndex(int value)

Редактировать:или

getXIndex()
setXIndex(int value);

?

Это было полезно?

Решение

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

getxIndex()
setxIndex(int value)

Если вы хотите, чтобы они использовались в качестве свойств в соответствии с разделом 8.8: Капитализация предполагаемых имен принадлежащий Спецификация API Javabeans (например, получить доступ к ним через $ {Object.xindex} в JSP.

Другие советы

В соответствии с Спецификация API JavaBeans от 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 в инструментах, она используется не исключительно.Например.Котлин не узнает xIndex как свойство в приведенном выше примере.И наоборот, свойство Kotlin var xIndex = 0 приведет к появлению методов Java getXIndex и setXIndex.Похоже, это ошибка согласно поддержке JetBrains, но я не вижу, как они могут это исправить, не внося кардинальных изменений.

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

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

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

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

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

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

Должно быть:

getXIndex()
setXIndex(final int xIndex)

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

Вы должны использовать Introspustry.DeCapitalize из пакета Java.beans, и у вас нет проблем, это соответствует правилам Java.

Eclipse IDE автоматически генерирует заселенцы и получатели как:

getxIndex()
setxIndex(int value)

Который согласно спецификации API Java Beans.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top