Tampak bagi saya bahwa kelas Boolean adalah kandidat ideal untuk diimplementasikan sebagai enum.
Melihat kode sumber, sebagian besar kelas adalah metode statis yang dapat dipindahkan tidak berubah ke enum, sisanya menjadi lebih sederhana sebagai enum. Bandingkan yang asli (komentar dan metode statis dihapus):
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);
}
}
dengan versi 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";
}
}
Apakah ada alasan mengapa Boolean tidak bisa menjadi enum?
Jika ini adalah kode Sun untuk menimpa metode equals (), maka tidak ada pemeriksaan mendasar untuk membandingkan referensi dari dua objek sebelum membandingkan nilainya. Beginilah menurut saya metode equals () seharusnya:
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
if
) tetapi dari sudut pandang teori konseptual / tipe boolean dan enum keduanya adalah contoh tipe penjumlahan, jadi saya pikir wajar untuk bertanya mengapa mereka tidak akan menjembatani kesenjangan di antara mereka.
valueOf(String)
(yang akan bertentangan dengan nilai enum dari) dan keajaiban di belakang getBoolean
yang dapat membuatnya sehingga Boolean.valueOf("yes")
mengembalikan true daripada false. Keduanya merupakan bagian dari spesifikasi 1.0 dan akan membutuhkan kompatibilitas ke belakang yang sesuai.