在Java中,静态final变量是常量,按照惯例它们应该是大写的。然而,我看到大多数人都用小写来声明记录器,这在PMD中是一种违反。
e.g:
private static final Logger logger = Logger.getLogger(MyClass.class);
只要搜索谷歌或“静态最终记录器”,你会看到这自己。
我们应该使用LOGGER吗?
在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而不是logger有什么大问题。但是如果你想要严格的学究,那么使用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);
}
我们有更多的模板使用它。
严格的约定使我们能够更高效地使用代码模板。
常量通常是大写的。
然而,记录器不应该是静态的,而是在使用slf4j facade时查找包含类的每个“新”。这避免了web容器中一些讨厌的类加载器问题,而且它允许记录器框架根据调用上下文做一些特殊的事情。
我喜欢谷歌的做法(谷歌Java风格)
每个常量都是一个静态最终字段,但并不是所有的静态最终字段都是常量。在选择常数情况之前,考虑场是否真的像常数。例如,如果该实例的任何可观察状态可以改变,那么它几乎肯定不是常量。仅仅打算永远不改变对象通常是不够的。
例子:
// Constants
static final int NUMBER = 5;
static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann");
static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutable
static final SomeMutableType[] EMPTY_ARRAY = {};
enum SomeEnum { ENUM_CONSTANT }
// Not constants
static String nonFinal = "non-final";
final String nonStatic = "non-static";
static final Set<String> mutableCollection = new HashSet<String>();
static final ImmutableSet<SomeMutableType> mutableElements = ImmutableSet.of(mutable);
static final Logger logger = Logger.getLogger(MyClass.getName());
static final String[] nonEmptyArray = {"these", "can", "change"};