В соответствии с спецификацией 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.