-
Notifications
You must be signed in to change notification settings - Fork 666
/
S1214_java.html
32 lines (31 loc) · 1.23 KB
/
S1214_java.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<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.</p>
<p>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,</p>
<p>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 { // Noncompliant
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>