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

e.g:

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

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

我们应该使用LOGGER吗?


当前回答

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

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

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

其他回答

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

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

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

顺便说一句:我更喜欢“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"};

别忘了,PMD会尊重评论

// NOPMD

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

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

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

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