Me parece que la clase booleana es un candidato ideal para implementarse como una enumeración.
Mirando el código fuente, la mayoría de la clase son métodos estáticos que podrían moverse sin cambios a una enumeración, el resto se vuelve mucho más simple como una enumeración. Comparar original (comentarios y métodos estáticos eliminados):
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 versión 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";
}
}
¿Hay alguna razón por la que Boolean no pueda convertirse en una enumeración?
Si este es el código de Sun para anular el método equals (), le falta una comprobación fundamental de comparar las referencias de los dos objetos antes de comparar sus valores. Así es como creo que debería ser el método equals ():
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
if) pero desde un punto de vista de teoría conceptual / tipo, los booleanos y las enumeraciones son instancias de tipos de suma, por lo que creo que es justo preguntar por qué no lo hicieron. No cerrar la brecha entre ellos.
valueOf(String)(lo que entraría en conflicto con el valor de la enumeración de) y la magia detrás de la getBooleancual puede hacer que Boolean.valueOf("yes")devuelva verdadero en lugar de falso. Ambos son parte de la especificación 1.0 y necesitarían una compatibilidad con versiones anteriores adecuada.