Parece-me que a classe booleana é um candidato ideal para ser implementado como um enum.
Observando o código-fonte, a maioria da classe são métodos estáticos que podem ser movidos inalterados para um enum, o restante se torna muito mais simples como um enum. Compare o original (comentários e métodos estáticos removidos):
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);
}
}
com uma versão 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";
}
}
Existe alguma razão pela qual o booleano não pode se tornar um enum?
Se este é o código Sun para substituir o método equals (), está faltando uma verificação muito fundamental na comparação das referências dos dois objetos antes de comparar seus valores. É assim que eu acho que o método equals () deve ser:
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
if
), mas do ponto de vista da teoria conceitual / de tipo booleanos e enums são instâncias de tipos de soma, por isso acho justo perguntar por que eles não não preenche a lacuna entre eles.
valueOf(String)
(que entraria em conflito com o valor da enumeração) e a mágica por trás da getBoolean
qual ela pode fazer com que Boolean.valueOf("yes")
retorne verdadeiro e não falso. Ambos fazem parte da especificação 1.0 e precisariam de compatibilidade com versões anteriores.