मेरे पास कुछ विरासत कोड में एक स्थिर विधि है, जिसे एकाधिक ग्राहकों द्वारा बुलाया जाता है। मुझे स्पष्ट रूप से इसे ओवरराइड करने के लिए कोई विकल्प नहीं है, या निर्भरता इंजेक्शन के माध्यम से व्यवहार बदलना है। मुझे मौजूदा कक्षा को संशोधित करने की अनुमति नहीं है।प्रतिबिंब के माध्यम से विधि व्यवहार कैसे बदलें?
अब मैं क्या करना चाहता हूं प्रतिबिंब का उपयोग करके व्यवहार (उस विधि - एक ही हस्ताक्षर और वापसी प्रकार के साथ) बदलना है।
क्या यह संभव है? यदि नहीं, तो क्या कोई डिज़ाइन पैटर्न मुझे बचा सकता है?
धन्यवाद!
संपादित करें: मैं कुछ बदल सकता हूं कि मैं क्या बदल सकता/संशोधित कर सकता हूं। मैं किसी भी मौजूदा वर्ग/विधि को नहीं बदल सकता - लेकिन मैं परियोजना में और कक्षाएं जोड़ सकता हूं। मौजूदा वर्गों के साथ मैं सबसे अच्छा कर सकता हूं उन्हें एनोटेट करना है। यह सब मौजूदा कोड में कुछ भी तोड़ने से बचने के लिए किया जाता है - जिसका मतलब है कि एक बड़ी परियोजना के लिए परीक्षण का पूरा दौर।
संपादित 2: java.lang.Instrumentation एंड्रॉइड के लिए उपलब्ध नहीं है - या नहीं यह एक अच्छा फिट लगता है!
प्रतिबिंब क्यों? –
आपको इसे बदलने की अनुमति नहीं है, लेकिन आपको इसे प्रतिबिंब के माध्यम से संशोधित करने की अनुमति है? ऐसा लगता है कि रास्ता अधिक जोखिम भरा है। – Keppil
मुझे लगता है कि यह एक रखरखाव दुःस्वप्न में खत्म होने जा रहा है। कोड इसे पढ़ने पर झूठ बोल रहा होगा। जाओ और उस वर्ग को बदलने की मंजूरी प्राप्त करें। – SpaceTrucker