प्रति-प्रति-विरोधी नहीं, बल्कि एक कोड पैटर्न जो बताता है कि आपको रिफ्लेक्टर की आवश्यकता है।
और यह बहुत आसान है, आपको बस अंगूठे के एक नियम को जानना होगा जो एक ही विधि में एक कोशिश ब्लॉक से अधिक नहीं लिख रहा है। यदि आप संबंधित कोड को एक साथ लिखना अच्छी तरह से जानते हैं, तो आमतौर पर प्रत्येक पकड़ने वाले ब्लॉक के साथ प्रत्येक कोशिश ब्लॉक को कॉपी और पेस्ट करना है और इसे एक नई विधि के अंदर पेस्ट करना है, और फिर मूल ब्लॉक को इस विधि के लिए कॉल के साथ बदलें।
अंगूठे का यह नियम रॉबर्ट सी। मार्टिन द्वारा उनकी पुस्तक 'क्लीन कोड' के सुझाव पर आधारित है:
यदि कीवर्ड 'ट्राय' किसी फ़ंक्शन में मौजूद है, तो यह फ़ंक्शन का पहला शब्द होना चाहिए और कैच या अंत में ब्लॉक होने के बाद कुछ भी नहीं होना चाहिए।
"छद्म-जावा" पर एक त्वरित उदाहरण। मान लीजिए कि हमारे पास ऐसा कुछ है:
try {
FileInputStream is = new FileInputStream(PATH_ONE);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
try {
FileInputStream is = new FileInputStream(PATH_TWO);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
try {
FileInputStream is = new FileInputStream(PATH_THREE);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
return null;
}
}
}
तब हम प्रत्येक कैच को पकड़ने की कोशिश कर सकते हैं और इस मामले में प्रत्येक ट्राइ-कैच ब्लॉक एक ही चीज़ की कोशिश करता है लेकिन अलग-अलग स्थानों में (कितना सुविधाजनक: डी), हमें केवल एक ट्राइ-कैच ब्लॉक को कॉपी करना है और इसका एक तरीका बनाना है ।
public String loadConfigFile(String path) {
try {
FileInputStream is = new FileInputStream(path);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
return null;
}
}
अब हम पहले भी इसी उद्देश्य के साथ इसका उपयोग करते हैं।
String[] paths = new String[] {PATH_ONE, PATH_TWO, PATH_THREE};
String configData;
for(String path : paths) {
configData = loadConfigFile(path);
if (configData != null) {
break;
}
}
मुझे आशा है कि वह मदद करेंगे :)