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

e.g:

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

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

我们应该使用LOGGER吗?


当前回答

别忘了,PMD会尊重评论

// NOPMD

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

其他回答

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

别忘了,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”;-)

我喜欢谷歌的做法(谷歌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"};