हम जैक्सन (जावा के लिए एक XPath पुस्तकालय) के लिए एक एडेप्टर लागू कर रहे हैं जो हमें अपने आवेदन के डेटा मॉडल तक पहुंचने के लिए XPath का उपयोग करने की अनुमति देता है।
यह उन वर्गों को लागू करने के द्वारा किया जाता है जो हमारे डेटा मॉडल के तत्वों में स्ट्रिंग्स (जैक्सन से हमारे पास) को मैप करते हैं। हमारा अनुमान है कि हमें कुल मिलाकर 1000 से अधिक स्ट्रिंग तुलनाओं के साथ लगभग 100 वर्गों की आवश्यकता होगी।
मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका सरल है अगर / अन्यथा कोड में सीधे लिखे गए तार के साथ बयान - प्रत्येक स्ट्रिंग्स को एक स्थिर के रूप में परिभाषित करने के बजाय। उदाहरण के लिए:
public Object getNode(String name) {
if ("name".equals(name)) {
return contact.getFullName();
} else if ("title".equals(name)) {
return contact.getTitle();
} else if ("first_name".equals(name)) {
return contact.getFirstName();
} else if ("last_name".equals(name)) {
return contact.getLastName();
...
हालाँकि मुझे हमेशा सिखाया गया था कि हमें स्ट्रिंग मानों को सीधे कोड में एम्बेड नहीं करना चाहिए, बल्कि इसके बजाय स्ट्रिंग स्थिरांक बनाएं। यह कुछ इस तरह दिखेगा:
private static final String NAME = "name";
private static final String TITLE = "title";
private static final String FIRST_NAME = "first_name";
private static final String LAST_NAME = "last_name";
public Object getNode(String name) {
if (NAME.equals(name)) {
return contact.getFullName();
} else if (TITLE.equals(name)) {
return contact.getTitle();
} else if (FIRST_NAME.equals(name)) {
return contact.getFirstName();
} else if (LAST_NAME.equals(name)) {
return contact.getLastName();
...
इस मामले में मुझे लगता है कि यह एक बुरा विचार है। निरंतर का उपयोग केवल एक बार किया जाएगा, getNode()
विधि में। स्ट्रिंग्स का सीधे उपयोग करना, स्थिरांक का उपयोग करने के रूप में पढ़ना और समझना आसान है, और कोड की कम से कम एक हजार पंक्तियों को लिखने से हमें बचाता है।
तो क्या एकल उपयोग के लिए स्ट्रिंग स्थिरांक को परिभाषित करने का कोई कारण है? या सीधे तार का उपयोग करना स्वीकार्य है?
पुनश्च। इससे पहले कि कोई भी इसके बजाय एनम का उपयोग करने का सुझाव देता है, हमने इसे बदल दिया, लेकिन एनम रूपांतरण साधारण स्ट्रिंग तुलना की तुलना में 15 गुना धीमा है, इसलिए इसे माना नहीं जा रहा है।
निष्कर्ष: नीचे दिए गए उत्तरों ने इस प्रश्न के दायरे को केवल स्ट्रिंग स्थिरांक से आगे बढ़ाया, इसलिए मेरे दो निष्कर्ष हैं:
- इस परिदृश्य में स्ट्रिंग स्थिरांक के बजाय स्ट्रिंग्स का उपयोग करना शायद ठीक है, लेकिन
- वहाँ तार का उपयोग करने से बचने के तरीके हैं, जो बेहतर हो सकता है।
इसलिए मैं रैपर तकनीक की कोशिश करने जा रहा हूं जो पूरी तरह से तार से बचा जाता है। दुर्भाग्य से हम स्ट्रिंग स्विच स्टेटमेंट का उपयोग नहीं कर सकते क्योंकि हम अभी जावा 7 पर नहीं हैं। अंततः, हालांकि, मुझे लगता है कि हमारे लिए सबसे अच्छा जवाब प्रत्येक तकनीक की कोशिश करना और उसके प्रदर्शन का मूल्यांकन करना है। वास्तविकता यह है कि अगर एक तकनीक स्पष्ट रूप से तेज है, तो हम शायद इसकी सुंदरता या परंपरा के पालन की परवाह किए बिना इसे चुनेंगे।
switch
लेबल के रूप में अनुमति देता है । if
कैस्केड के बजाय एक स्विच का उपयोग करें ।