यदि समान इंटरफ़ेस वाले वर्ग समान हैं लेकिन अलग-अलग विधि हस्ताक्षर हैं तो क्या करें?क्या करना है यदि समान इंटरफेस वाले वर्ग समान लेकिन अलग-अलग विधि हस्ताक्षर वाले हैं?
मान लें कि मेरे पास अलग-अलग लागतों की गणना करने के लिए एक परियोजना है (अंतिम लागत कुल प्राप्त करने के लिए)।
मेरे कार्यक्रम में, कई कैलकुलेटर कक्षाएं हैं, अर्थात् ACostCalculator
, BCostCalculator
और इसी तरह। जब लागत की गणना करने के लिए calculate()
विधि लागू की जाती है, तो लागत लागत कंटेनर भी उन लागत कैलकुलेटर को पास किया जाता है। एक अच्छी परिदृश्य में, मैं प्रत्येक लागत कैलकुलेटर के लिए CostCalculator
इंटरफ़ेस बना सकता हूं।
हालांकि, विभिन्न लागतों की गणना के लिए विभिन्न संसाधनों की आवश्यकता होती है।
//getResource() are costly method while several costs need this. So do it outside calculate() method.
ResourceA resourceA = getResourceA();
ResourceB resourceB = getResourceB();
CostContainer costContainer = new CostContainer();
CostCalculator aCostCalculator = new ACostCalculator();
...
CostCalculator eCostCalculator = new ECostCalculator();
aCostCalculator.calculate(costContainer);
bCostCalculator.calculate(costContainer)
cCostCalculator.calculate(costContainer, resourceA);
dCostCalculator.calculate(costContainer, resourceA);
eCostCalculator.calculate(costContainer, resourceA, resourceB);
तो हस्ताक्षर बिल्कुल वैसा ही है, मैं आसानी से एक पाश कर सकते हैं यह एक ही बार में करना है: मेरे वर्तमान कार्यक्रम में, यह तरह बनाते हैं। हालांकि, चूंकि वे समान लेकिन अलग हैं, इसलिए मैं एक अच्छा इंटरफ़ेस भी नहीं बना सकता।
मुझे यकीन नहीं है कि ऐसा करने के अच्छे तरीके हैं या नहीं। मैं क्या सोचते की
calculate(CostContainer costContainer, List<Object> resources);
कोई भी विचार में करने के लिए सभी calculate()
विधि सामान्यीकरण है सकते हैं? जवाब के लिए धन्यवाद।
... या सूची के बजाय varargs। –