Since Checkstyle 3.1
Makes sure that utility classes (classes that contain only static methods or fields in their API) do not have a public constructor.
Rationale: Instantiating utility classes does not make sense. Hence, the constructors should either be private or (if you want to allow subclassing) protected. A common mistake is forgetting to hide the default constructor.
If you make the constructor protected you may want to consider the following constructor implementation technique to disallow instantiating subclasses:
public class StringUtils // not final to allow subclassing
{
protected StringUtils() {
// prevents calls from subclass
throw new UnsupportedOperationException();
}
public static int count(char c, String s) {
// ...
}
}
To configure the check:
<module name="Checker">
<module name="TreeWalker">
<module name="HideUtilityClassConstructor"/>
</module>
</module>
Example:
class Example1 { // violation
public Example1() {
}
public static void fun() {
}
}
class Foo { // OK
private Foo() {
}
static int n;
}
class Bar { // OK
protected Bar() {
// prevents calls from subclass
throw new UnsupportedOperationException();
}
}
class UtilityClass { // violation
static float f;
}
All messages can be customized if the default message doesn't suit you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.design