HideUtilityClassConstructor

Since Checkstyle 3.1

Description

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) {
    // ...
  }
}
        

Examples

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;
}
        

Example of Usage

Violation Messages

All messages can be customized if the default message doesn't suit you. Please see the documentation to learn how to.

Package

com.puppycrawl.tools.checkstyle.checks.design

Parent Module

TreeWalker