Since
Sonar is now part of our normal build platform on the project I'm currently doing, we're keeping a close eye on the violations it identifies. One rule we violate in a couple of places is the
CheckStyle constant naming rule. This rule simply says that the names of all
static final variables should be ALL_UPPERCASE_WITH_UNDERSCORES. This is of course a well known Java coding convention. Still, it feels a little unnatural if you apply it to
ThreadLocals, which are technically
static final variables, but are neither immutable nor do they have a
global scope like typical constants. This makes code using
ThreadLocals look a bit weird if you use normal Java constant naming, e.g. compare the following:
private static final ThreadLocal<Date> TIME_FRAME = new ThreadLocal<Date>();
...
TIME_FRAME.set(myDate);
private static final ThreadLocal<Date> timeFrame = new ThreadLocal<Date>();
...
timeFrame.set(myDate);
For me using normal variable naming conventions for
ThreadLocals seems to better communicate their role and intented usage in the code. Does anybody have an idea what the official Java naming conventions for ThreadLocals are?
When you say anything a constant, you cannot invoke any method on it something like the way you're doing over here. (set(myDate)). That's the code smell that sonar is detecting.
ReplyDeleteComing to the standard Java conventions, it's safe to keep it like that just to indicate the users that it is a constant and add a ignore case so that sonar won't detect the method invocation of the constant.