मेरे पास एक ऑब्जेक्ट है जिसमें फ़ील्ड के रूप में कुछ सरणी हैं। यह वर्ग मोटे तौर पर इस तरह दिखता है:समान ऑब्जेक्ट गुण प्राप्त करने के लिए सामान्यीकृत विधि
public class Helper {
InsuranceInvoices[] insuranceInvoices;
InsuranceCollectiveInvoices[] insuranceCollectiveInvoices
BankInvoices[] bankInvoices;
BankCollectiveInvoices[] bankCollectiveInvoices;
}
चालान सभी प्रकार के एक आपसी मार्कर इंटरफ़ेस चालान है।
मुझे उन सभी चालानों को उन पर एक और विधि का आह्वान करने की आवश्यकता है।
Helper helperObject = new Helper();
// ...
for (InsuranceInvoices invoice : helperObject.getInsuranceInvoices()) {
Integer customerId = invoice.getCustomerId();
// ...
}
for (BankInvoices invoice : helperObject.getBankInvoices()) {
Integer customerId = invoice.getCustomerId();
// ...
}
// repeat with all array fields
समस्या यह है कि सभी चालानों में केवल मार्कर इंटरफ़ेस सामान्य होता है। विधि getCustomerID() एक पारस्परिक इंटरफ़ेस या कक्षा द्वारा परिभाषित नहीं है। यह एक ऐसा व्यवहार है जिसे मैं किसी दिए गए विनिर्देश के कारण नहीं बदल सकता।
फॉर-प्रत्येक-लूप के अंदर कोड पुनरावृत्ति कुछ ऐसा है जो मुझे बग करता है। मुझे चार अलग-अलग सरणी में सभी चालान वस्तुओं पर एक ही चीज़ करना है। इसलिए प्रत्येक के लिए चार-लूप जो अनावश्यक कोड को फहराते हैं।
क्या कोई तरीका है कि मैं एक सामान्य (निजी) विधि लिख सकता हूं? एक विचार था:
private void generalMethod(Invoice[] invoiceArray){
// ...
}
लेकिन क्योंकि वर्ग चालान विधि getCusomterId() पता नहीं है इस चार instanceof चेकों की आवश्यकता होगी। इसलिए मुझे कुछ भी नहीं मिलेगा; विधि में अभी भी पुनरावृत्ति होगी।
मैं इस समस्या को सामान्य बनाने के हर संभावित समाधान के लिए आभारी हूं!
हां, तो कक्षाएं सभी लागू 'Invoice' है, और सभी को लागू' getCustomerId', लेकिन ' getCustomerId 'चालान 'इंटरफ़ेस में नहीं है? आपको नाम से विधि तक पहुंचने और इसे आमंत्रित करने के लिए प्रतिबिंब का उपयोग करना होगा। इस बिंदु पर, 'चालान' इंटरफ़ेस काफी बेकार है। – njzk2
'getInsuranceInvoices' प्राप्त करें, 'getBankInvoices' ... सभी चार चालानों की समान संख्या लौटाते हैं? – Rajesh
मेरे पास एक सुझाव है ... उस व्यक्ति के लिए एक क्लाउबैट लागू करें जिसने 'चालान' इंटरफेस को एक मार्कर इंटरफ़ेस बनाया है, जो निर्दिष्ट करता है कि कौन से तरीके चालान आम हैं। – Powerlord