मेरे जावा कोड और एक डेटाबेस या क्लाइंट ऐप के बीच में एनम भेजना, मैं अक्सर स्ट्रिंग्स के रूप में एनम मूल्यों को पढ़ना और लिखना समाप्त करता हूं। toString()
स्पष्ट रूप से कहा जाता है जब तारों को समतल करना। कुछ एनमों पर ओवरराइडिंग स्ट्रीडिंग () का मतलब था कि कभी-कभी मैं बस
"<input type='checkbox' value='" + MY_CONST1 + "'>"
और कभी-कभी मुझे कॉल करने के लिए याद करना पड़ता था
"<input type='checkbox' value='" + MY_CONST1.name() + "'>"
जिसके कारण त्रुटियां हुईं, इसलिए मैं अब ऐसा नहीं करता। वास्तव में, मैं Enum पर किसी भी तरीके को ओवरराइड नहीं करता हूं क्योंकि यदि आप उन्हें पर्याप्त क्लाइंट कोड में फेंकते हैं, तो आप अंततः किसी की उम्मीदों को तोड़ देंगे।
की तरह अपने खुद के नई विधि नाम है, public String text()
या toEnglish()
या जो कुछ भी।
यहाँ एक छोटी सहायक क्रिया है जो आपको कुछ टाइपिंग बचा सकती है यदि आपके पास ऊपर की तरह बहुत सारी दुश्मनी है:
public static String ucFirstLowerRest(String s) {
if ( (s == null) || (s.length() < 1) ) {
return s;
} else if (s.length() == 1) {
return s.toUpperCase();
} else {
return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
}
}
हमेशा .toUpperCase () या .toLowerCase () कॉल करना आसान होता है, लेकिन मिश्रित-केस वापस लेना मुश्किल हो सकता है। रंग पर विचार करें, "ब्लु डी फ्रांस।" फ्रांस को हमेशा पूंजीकृत किया जाता है, इसलिए यदि आप उस में भाग लेते हैं, तो आप अपने एनुम में एक टेक्स्ट लॉवर () विधि जोड़ना चाहते हैं। जब आप एक वाक्य की शुरुआत में, बनाम एक वाक्य के बीच में, बनाम एक शीर्षक में इस पाठ का उपयोग करते हैं, तो आप देख सकते हैं कि एक एकल toString()
विधि कैसे कम होने वाली है। और यह कि जावा पहचानकर्ताओं में अवैध वर्णों को भी नहीं छूता है, या जो टाइप करने के लिए एक दर्द है क्योंकि वे मानक कीबोर्ड, या उन वर्णों पर प्रतिनिधित्व नहीं करते हैं जिनके पास मामला नहीं है (कांजी, आदि)।
enum Color {
BLEU_DE_FRANCE {
@Override public String textTc() { return "Bleu De France"; }
@Override public String textLc() { return "bleu de France"; }
}
CAFE_NOIR {
@Override public String textTc() { return "Café Noir"; }
}
RED,
YELLOW,
GREEN;
// The text in title case
private final String textTc;
private Color() {
textTc = ucFirstLowerRest(this.toString());
}
// Title case
public String textTc() { return textTc; }
// For the middle of a sentence
public String textLc() { return textTc().toLowerCase(); }
// For the start of a sentence
public String textUcFirst() {
String lc = textLc();
return lc.substring(0, 1).toUpperCase() + lc.substring(1);
}
}
इनको सही तरीके से इस्तेमाल करना इतना मुश्किल नहीं है:
IllegalStateException(color1.textUcFirst() + " clashes horribly with " +
color2.textLc() + "!")
उम्मीद है कि यह भी प्रदर्शित करता है कि मिश्रित-मामले एनम मूल्यों का उपयोग करने से आपको भी निराशा होगी। अंडरस्कोर एनम स्थिरांक के साथ ऑल-कैप रखने का एक अंतिम कारण यह है कि ऐसा करने से प्रिंसिपल ऑफ लेस्ट एस्टनमेंट का अनुसरण होता है। लोग इसकी उम्मीद करते हैं, इसलिए यदि आप कुछ अलग करते हैं, तो आपको हमेशा खुद को समझाते रहना होगा, या अपने कोड का दुरुपयोग करने वाले लोगों से निपटना होगा।