在Java中,静态final变量是常量,按照惯例它们应该是大写的。然而,我看到大多数人都用小写来声明记录器,这在PMD中是一种违反。

e.g:

private static final Logger logger = Logger.getLogger(MyClass.class);

只要搜索谷歌或“静态最终记录器”,你会看到这自己。

我们应该使用LOGGER吗?


当前回答

别忘了,PMD会尊重评论

// NOPMD

在里面。这将导致PMD跳过它的检查行,这将允许你选择任何你想要的样式。

其他回答

为了给crunchdog的答案增加更多的价值,Java编码风格指南在3.3段字段命名中说明了这一点

作为常量使用的字段名称应该全部用大写字母,用下划线分隔单词。以下被认为是常量: 所有静态final基元类型(记住,所有接口字段本质上都是静态final)。 所有静态最终对象引用类型,后面永远没有“。”(点)。 所有静态最终数组后面永远没有“[”(开始方括号)。 例子: Min_value, max_buffer_size, options_file_name

按照这种约定,logger是第2点中所述的静态最终对象引用,但因为每次使用它时都跟在“。”后面,所以不能将其视为常量,因此应该小写。

我更喜欢“logger”,即小写。原因不在于它是常量还是非常量(可变的还是不可变的)。如果我们使用这个推理,那么如果我们改变了日志框架(或者框架改变了日志记录器的可变性),我们就必须重命名变量。

对我来说,其他原因更重要。

A logger is a shadow object in the class and should not be very prominent as it does not implement the main logic. If we use 'LOGGER', it's an eye catcher in the code that attracts too much attention. Sometimes loggers are declared at instance level (i.e. not as static), and even are injected as a dependency. I wouldn't like to change my code if I decide to change the way I obtain the logger. The code stability wrt. this (hypothetical in many cases) change is the other reason why I prefer the lower case.

从有效的java,第二版。

The sole exception to the previous rule concerns “constant fields,” whose names should consist of one or more uppercase words separated by the underscore character, for example, VALUES or NEGATIVE_INFINITY. A constant field is a static final field whose value is immutable. If a static final field has a primitive type or an immutable reference type (Item 15), then it is a constant field. For example, enum constants are constant fields. If a static final field has a mutable reference type, it can still be a constant field if the referenced object is immutable.

总之,常量==静态final,如果它是引用(相对于简单类型),则加上不可变性。

查看slf4j记录器, http://www.slf4j.org/api/org/slf4j/Logger.html

它是不可变的。另一方面,JUL记录器是可变的。log4j日志记录器也是可变的。因此,为了正确起见,如果您正在使用log4j或JUL,它应该是“logger”,如果您正在使用slf4j,它应该是logger。

请注意,上面链接的slf4j javadocs页面有一个使用“logger”而不是“logger”的示例。

当然,这些只是惯例,不是规则。如果您碰巧正在使用slf4j,并且您想要使用“logger”,因为您已经习惯了其他框架中的“logger”,或者如果它更容易输入,或者为了可读性,那么请继续使用。

别忘了,PMD会尊重评论

// NOPMD

在里面。这将导致PMD跳过它的检查行,这将允许你选择任何你想要的样式。

如果你的编码标准——如果你有的话——说它应该是大写的,那么是的。

我看不出任何严格的理由。我认为这完全取决于你个人的喜好。你公司的编码标准。

顺便说一句:我更喜欢“LOGGER”;-)