According to Joshua Bloch, author of "Effective Java": ____ The constant interface pattern is a poor use of interfaces. 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. ____ This rule raises an issue when an interface consists solely of fields, without any other members. == Noncompliant Code Example [source,java] ---- interface Status { // Noncompliant int OPEN = 1; int CLOSED = 2; } ---- == Compliant Solution [source,java] ---- public enum Status { // Compliant OPEN, CLOSED; } ---- or [source,java] ---- public final class Status { // Compliant public static final int OPEN = 1; public static final int CLOSED = 2; } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) include::message.adoc[] ''' == Comments And Links (visible only on this page) include::comments-and-links.adoc[] endif::env-github,rspecator-view[]