Item 19 - Use interfaces only to define types

From Effective Java 2/e by Joshua Bloch

The constant interface pattern is a poor use of interfaces

// Constant interface antipattern - do not use!
public interface PhysicalConstants {
   // Avogadro's number (1/mol)
   static final double AVOGADROS_NUMBER   = 6.02214199e23;
   // Boltzmann constant (J/K)
   static final double BOLTZMANN_CONSTANT = 1.3806503e-23;
   // Mass of the electron (kg)
   static final double ELECTRON_MASS      = 9.10938188e-31;
}

If you want to export constants, there are several reasonable choices. If the constants are strongly tied to an existing class or interface, you should add them to the class or interface

// Constant utility class
public class PhysicalConstants {
   private PhysicalConstants() { }  // Prevents instantiation

   public static final double AVOGADROS_NUMBER = 6.02214199e23;
   public static final double BOLTZMANN_CONSTANT = 1.3806503e-23;
   public static final double ELECTRON_MASS = 9.10938188e-31;
}

you can avoid the need for qualifying the constants with the class name by making use of the static import facility

Posted by The Finest Artist