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

e.g:

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

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

我们应该使用LOGGER吗?


当前回答

如果你谷歌这个,你可能会发现在某些情况下,记录器没有被定义为静态final。再快速复制粘贴一下,也许就能解释了。

我们在所有代码中都使用了LOGGER,这与我们的命名约定相对应(CheckStyle对此很满意)。


我们甚至更进一步,利用Eclipse中严格的命名约定。 我们用一个代码模板创建一个新类:

    // private static final Logger LOGGER = Logger.getLogger(${enclosing_type}.class);

日志记录器被注释掉,因为最初我们不需要它。但是如果我们以后需要它,我们只需取消注释它。

然后,在代码中,我们使用期望该记录器出现的代码模板。 使用try-catch模板的示例:

    try {
      ${cursor} or some other template
    } catch (Exception t) {
      LOGGER.error("${methodName} ${method parameters}", t);
    }

我们有更多的模板使用它。

严格的约定使我们能够更高效地使用代码模板。

其他回答

别忘了,PMD会尊重评论

// NOPMD

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

我更喜欢“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.

我个人认为它大写看起来真的很大。此外,由于它是一个与类行为没有直接关系的类,我不认为使用logger而不是logger有什么大问题。但是如果你想要严格的学究,那么使用LOGGER。

记录器引用不是一个常量,而是一个最终引用,不应该是大写的。常量值应该是大写的。

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

private static final double MY_CONSTANT = 0.0;

如果您正在使用自动化工具来检查您的编码标准,并且它违反了上述标准,那么它或标准应该被修复。如果您正在使用外部标准,请修复代码。

Sun Java中的约定是大写的公共静态常量。显然,记录器不是常量,而是表示一个可变的东西(否则就没有必要调用它的方法,希望发生一些事情);对于非常数终场没有特定的标准。