<p>According to Joshua Bloch, author of "Effective Java":</p>

<blockquote>
<p>
The constant interface pattern is a poor use of interfaces.
</p>

<p>
That a class uses some constants internally is an implementation detail.
Implementing a constant interface causes this implementation detail to leak into the class's exported API.
It is of no consequence to the users of a class that the class implements a constant interface.
In fact, it may even confuse them.
Worse, it represents a commitment:
if in a future release the class is modified so that it no longer needs to use the constants,
it still must implement the interface to ensure binary compatibility.
If a nonfinal class implements a constant interface,
all of its subclasses will have their namespaces polluted by the constants in the interface.
</p>
</blockquote>

<h2>Noncompliant Code Example</h2>

<pre>
interface Status {                      // Non-Compliant
   int OPEN = 1;
   int CLOSED = 2;
}
</pre>

<h2>Compliant Solution</h2>

<pre>
public enum Status {                    // Compliant
  OPEN,
  CLOSED;
}
</pre>

<p>or</p>

<pre>
public final class Status {             // Compliant
   public static final int OPEN = 1;
   public static final int CLOSED = 2;
}
</pre>