Mi sembra che la classe booleana sia la candidata ideale per essere implementata come enum.
Guardando il codice sorgente, la maggior parte della classe sono metodi statici che potrebbero essere spostati invariati in un enum, il resto diventa molto più semplice come enum. Confronta originale (commenti e metodi statici rimossi):
public final class Boolean implements java.io.Serializable,
Comparable<Boolean>
{
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
private final boolean value;
public Boolean(boolean value) {
this.value = value;
}
public Boolean(String s) {
this(toBoolean(s));
}
public boolean booleanValue() {
return value;
}
public String toString() {
return value ? "true" : "false";
}
public int hashCode() {
return value ? 1231 : 1237;
}
public boolean equals(Object obj) {
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
public int compareTo(Boolean b) {
return compare(this.value, b.value);
}
}
con una versione enum:
public enum Boolean implements Comparable<Boolean>
{
FALSE(false), TRUE(true);
private Boolean(boolean value) {
this.value = value;
}
private final boolean value;
public boolean booleanValue() {
return value;
}
public String toString() {
return value ? "true" : "false";
}
}
C'è qualche motivo per cui Boolean non potrebbe diventare un enum?
Se questo è il codice Sun per sovrascrivere il metodo equals (), manca un controllo fondamentale per confrontare i riferimenti dei due oggetti prima di confrontare i loro valori. Ecco come penso che il metodo equals () dovrebbe essere:
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
if
) ma da un punto di vista della teoria concettuale / tipo i booleani e gli enum sono entrambi esempi di tipi di somma, quindi penso che sia giusto chiedersi perché non lo abbiano fatto colmare il divario tra di loro.
valueOf(String)
(che sarebbe in conflitto con il valore di enum di Of) e la magia dietro la getBoolean
quale può farlo in modo che Boolean.valueOf("yes")
ritorni vero piuttosto che falso. Entrambi fanno parte delle specifiche 1.0 e richiederebbero un'adeguata compatibilità con le versioni precedenti.