| Interfaces should be used to define types. Using an interface as a collection of |
| static methods and fields violates that, and can lead to confusing type |
| hierarchies if the interface is then implemented to allow easy access to the |
| constants. |
| |
| Prefer using a `public final` class instead to prohibit subclassing. |
| |
| ```java |
| public interface Constants { |
| final float PI = 3.14159f; |
| } |
| ``` |
| |
| ```java |
| public final class Constants { |
| public static final float PI = 3.14159f; |
| |
| private Constants() {} |
| } |
| ``` |
| |
| See |
| [Effective Java 3rd Edition ยง22: Use interfaces only to define types][ej3e-22] |
| for more details. |
| |
| [ej3e-22]: https://books.google.com/books?id=BIpDDwAAQBAJ |