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

----
interface Status {                      // Noncompliant
   int OPEN = 1;
   int CLOSED = 2;
}
----


== Compliant Solution

----
public enum Status {                    // Compliant
  OPEN,
  CLOSED;
}
----

or

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


ifdef::env-github,rspecator-view[]
'''
== Comments And Links
(visible only on this page)

include::comments-and-links.adoc[]
endif::env-github,rspecator-view[]
