यह मुझे लगता है कि बुलियन वर्ग एक आदर्श के रूप में लागू होने वाला एक आदर्श उम्मीदवार है।
स्रोत कोड को देखते हुए, अधिकांश वर्ग स्थिर विधियां हैं जिन्हें एक एनम में अपरिवर्तित किया जा सकता है, बाकी एक एनम के रूप में बहुत सरल हो जाते हैं। मूल (टिप्पणियों और स्थिर विधियों को हटाएं) की तुलना करें:
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";
}
}
क्या कोई कारण है कि बूलियन एक एनम नहीं बन सकता है?
यदि यह बराबर () विधि को ओवरराइड करने के लिए सूर्य कोड है, तो यह दोनों मूल्यों के संदर्भों की तुलना करने से पहले उनके मूल्यों की तुलना करने की एक बहुत ही मौलिक जांच को याद कर रहा है। यह है कि मुझे लगता है कि बराबर () विधि होनी चाहिए:
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
if
) प्रसंस्करण के लिए एक विशेष विवरण है ( लेकिन एक वैचारिक / प्रकार के दृष्टिकोण से देखें) बूलियन और एनम दोनों राशि प्रकार के उदाहरण हैं, इसलिए मुझे लगता है कि यह पूछना उचित है कि वे क्यों हैं 'उनके बीच की खाई को पाटना।
valueOf(String)
(जो कि एनम के मूल्य के साथ संघर्ष करेगा) और इसके पीछे का जादू getBoolean
इसे बना सकता है ताकि यह Boolean.valueOf("yes")
झूठे के बजाय सच हो। जो दोनों 1.0 कल्पना का हिस्सा हैं और उपयुक्त पश्चगामी संगतता की आवश्यकता होगी।