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