สำหรับฉันแล้วดูเหมือนว่าคลาสบูลีนเป็นตัวเลือกที่เหมาะสมที่สุดที่จะนำไปใช้เป็น enum
การดูซอร์สโค้ดคลาสส่วนใหญ่เป็นวิธีสแตติกซึ่งสามารถย้ายได้ไม่เปลี่ยนแปลงไปเป็น enum ส่วนที่เหลือจะกลายเป็น enum ได้ง่ายกว่ามาก เปรียบเทียบต้นฉบับ (ความคิดเห็นและวิธีการแบบคงที่ออก):
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:
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";
}
}
มีเหตุผลใดที่บูลีนไม่สามารถกลายเป็น enum ได้?
หากนี่คือรหัส Sun เพื่อแทนที่เมธอด equals () มันจะขาดการตรวจสอบขั้นพื้นฐานอย่างมากในการเปรียบเทียบการอ้างอิงของวัตถุทั้งสองก่อนที่จะเปรียบเทียบค่าของพวกเขา นี่คือวิธีที่ฉันคิดว่าวิธี equals () ควรเป็น:
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
if
) แต่จากแนวคิดเชิงทฤษฎี / ประเภทมุมมอง booleans และ enums เป็นทั้งสองประเภทรวมดังนั้นฉันคิดว่ามันยุติธรรมที่จะถามว่าทำไมพวกเขาไม่ ไม่ลดช่องว่างระหว่างพวกเขา
valueOf(String)
(ซึ่งจะขัดแย้งกับคุณค่าของ enum) และเวทย์มนตร์ที่อยู่เบื้องหลังgetBoolean
ซึ่งสามารถทำให้เกิดBoolean.valueOf("yes")
ผลตอบแทนจริงมากกว่าเท็จ ทั้งสองอย่างนี้เป็นส่วนหนึ่งของข้อมูลจำเพาะ 1.0และจะต้องมีความเข้ากันได้ย้อนหลังที่เหมาะสม