Bana göre Boolean sınıfı bir enum olarak uygulanacak ideal bir aday.
Kaynak koduna bakıldığında, sınıfın çoğu değişmeden bir numaralandırmaya taşınabilen statik yöntemlerdir, geri kalanı bir numaralandırma olarak çok daha basit hale gelir. Orijinali karşılaştırın (yorumlar ve statik yöntemler kaldırıldı):
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);
}
}
enum versiyonu ile:
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";
}
}
Boolean'ın enum haline gelmemesinin bir nedeni var mı?
Equals () yöntemini geçersiz kılmak için bu Sun kodu ise, değerlerini karşılaştırmadan önce iki nesnenin referanslarını karşılaştırmanın çok temel bir denetimi yoktur. Bu eşit () yöntemi olması gerektiğini düşünüyorum:
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
if
) işlemek için özel bir ifadeye sahiptir, ancak kavramsal / tip teorisi açısından booleans ve enumlar her iki toplamın örneğidir, bu yüzden neden yapmadıklarını sormanın adil olduğunu düşünüyorum aralarındaki boşluğu doldurmaz.
valueOf(String)
arkasında (ENUM en valueOf ters düşecek) ve büyü getBoolean
hangi böylece yapabilirsiniz Boolean.valueOf("yes")
çok yanlış daha doğrudur döner. Her ikisi de 1.0 spesifikasyonunun bir parçası ve uygun geriye dönük uyumluluk gerektiriyordu.