В Java статические конечные переменные являются константами, и существует соглашение, что они должны быть в верхнем регистре. Тем не менее, я видел, что большинство людей объявляют регистраторы в нижнем регистре, что является нарушением PMD .
например:
private static final Logger logger = Logger.getLogger(MyClass.class);
Просто поиск Google или SO для «статического окончательного регистратора» , и вы увидите это сам.
Должны ли мы использовать LOGGER вместо этого?
private static final Logger LOGGER = LoggerFactory.getLogger(Foo.class);
Ответы:
Ссылка регистратора не является константой, а является окончательной ссылкой и НЕ должна быть в верхнем регистре. Постоянное значение должно быть в верхнем регистре.
источник
Чтобы повысить ценность ответа crunchdog, в Руководстве по стилю кодирования Java это указано в параграфе 3.3 «Имена полей».
В соответствии с этим соглашением,
logger
являетсяstatic final
ссылкой на объект , как указано в пункте 2, а потому , что это следует «.
» каждый раз вы его используете, это не может рассматриваться как константа , и , следовательно , должны быть в нижнем регистре.источник
Object
и вы можете вызвать метод, например,.equals
для них..
также могут следовать .Из эффективной Java, 2-е изд.,
В итоге, константа == static final, плюс, если это ссылка (по сравнению с простым типом), неизменность.
Глядя на регистратор slf4j, http://www.slf4j.org/api/org/slf4j/Logger.html
Это неизменно. С другой стороны, регистратор JUL изменчив. Регистратор log4j также изменчив. Таким образом, чтобы быть правильным, если вы используете log4j или JUL, это должен быть «logger», а если вы используете slf4j, это должен быть LOGGER.
Обратите внимание, что на приведенной выше странице javadocs slf4j есть пример, в котором они используют «logger», а не «LOGGER».
Это, конечно, только условные обозначения, а не правила. Если вы используете slf4j и хотите использовать «регистратор», потому что вы привыкли к этому из других платформ, или если его легче набирать, или для удобства чтения, продолжайте.
источник
Logger
интерфейс неизменен ? Толькоfinal class
(какString
илиInteger
) может гарантировать неизменность. Даже если вы не можете найти изменчивую реализацию SLF4JLogger
, никто не может помешать вам написать ее самостоятельно.Мне нравится, что Google это делает ( стиль Google Java )
Примеры:
источник
private static final Logger logger = Logger.getLogger(Finalizer.class.getName());
Если вы используете автоматизированный инструмент для проверки ваших стандартов кодирования, и он нарушает указанные стандарты, то его или стандарты должны быть исправлены. Если вы используете внешний стандарт, исправьте код.
Соглашение в Sun Java прописно для открытых статических констант. Очевидно, что регистратор не является константой, но представляет изменяемую вещь (иначе не было бы смысла вызывать методы для него в надежде, что что-то случится); не существует определенного стандарта для непостоянных конечных полей.
источник
Если вы воспользуетесь этим, вы можете обнаружить, что в некоторых случаях регистраторы не определяются как статические окончательные. Добавьте к этому быстрое копирование и вставку, и это может объяснить это.
Мы используем LOGGER во всем нашем коде, и это соответствует нашему соглашению об именах (и наш CheckStyle доволен этим).
Мы даже идем дальше, пользуясь строгим соглашением об именах в Eclipse. Мы создаем новый класс с шаблоном кода:
Регистратор закомментирован, так как изначально он нам не нужен. Но если это понадобится нам позже, мы просто раскомментируем это.
Затем в коде мы используем шаблоны кода, которые ожидают присутствия этого регистратора. Пример с шаблоном try-catch:
У нас есть еще несколько шаблонов, которые его используют.
Строги конвенции позволяют нам быть более продуктивными и согласующимися с шаблонами кода .
источник
Лично я думаю, что это выглядит действительно большим в верхнем регистре. Более того, поскольку это класс, который не имеет прямого отношения к поведению класса, я не вижу большой проблемы в использовании
logger
вместоLOGGER
. Но если вы собираетесь быть строго педантичным, то используйтеLOGGER
.источник
Не забывайте, что PMD будет уважать комментарий с
в этом. Это заставит PMD пропустить строку из своих проверок, это позволит вам выбрать любой стиль, который вы хотите.
источник
Обычно константы в верхнем регистре.
Регистраторы, однако, не должны быть статичными, а должны искать каждый «новый» содержащий класс при использовании фасада slf4j. Это позволяет избежать некоторых неприятных проблем с загрузчиком классов, в частности, веб-контейнеров, а также позволяет каркасу ведения журналов выполнять специальные действия в зависимости от контекста вызова.
источник
Я предпочитаю «регистратор», то есть строчные буквы. Причина не в том, что это константа или не константа (изменяемая или неизменная). Если бы мы использовали это рассуждение, нам пришлось бы переименовать переменную, если мы изменим каркас журналирования (или если каркас изменяет изменчивость логгеров).
Для меня важнее другие причины.
Регистратор является теневым объектом в классе и не должен быть очень заметным, поскольку он не реализует основную логику. Если мы используем «LOGGER», это привлекает внимание кода, который привлекает слишком много внимания.
Иногда регистраторы объявляются на уровне экземпляра (т. Е. Не являются статичными) и даже внедряются как зависимости. Я не хотел бы менять свой код, если я решил изменить способ получения регистратора. Стабильность кода относительно это (гипотетическое во многих случаях) изменение - еще одна причина, по которой я предпочитаю строчные буквы.
источник
Если ваши стандарты кодирования - если они есть - скажите, что они должны быть прописными, тогда да.
Я не вижу строгой причины для того или иного пути. Я думаю, что это полностью зависит от ваших личных симпатий, соответственно. стандарты кодирования вашей компании.
Кстати: я предпочитаю "LOGGER" ;-)
источник