2012-10-30 13 views
6

में प्रॉक्सी में बहु-धर्मार्थ विधियों को ओवरराइड करना मेरे पास एक जावा क्लास है जिसमें 2 विधियां हैं लेकिन अलग-अलग arities (कोई कोई तर्क नहीं लेता है, अन्य 1 तर्क लेता है)। मैं एक प्रॉक्सी बनाता हूं जो इन तरीकों को ओवरराइड करता है। समस्या यह है कि अगर इस जावा वर्ग से नो-एर्ग विधि को बुलाया जाता है - आधार कार्यान्वयन को प्रॉक्सी के बजाय बुलाया जाता है। लेकिन अगर मैं सीधे ओबीजे पर नो-एर्ग विधि कहता हूं - सही प्रॉक्सी विधि लागू की जाती है। क्या कोई इस व्यवहार को समझा सकता है?क्लोजर

Test.java:

package example; 

public abstract class Test { 

    public void callMethods(Object obj){ 
     callMethods(); 
     callMethods2(); 
    } 

    public void callMethods() { 
     System.out.println("Default callMethods"); 
    } 

    public void callMethods2() { 
     System.out.println("Default callMethods2"); 
    } 

} 

run.clj:

(let [obj (proxy [example.Test] [] 
      (callMethods 
       ([] (println "Overridden callMethods")) 
       ([obj] (proxy-super callMethods obj))) 
      (callMethods2 
       ([] (println "Overridden callMethods2"))))] 
    (.callMethods obj) 
    (.callMethods obj :test)) 

आउटपुट:

Overridden callMethods 
Default callMethods 
Overridden callMethods2 

अपेक्षित उत्पादन:

Overridden callMethods 
Overridden callMethods 
Overridden callMethods2 

उत्तर

5

प्रॉक्सी इस ऑब्जेक्ट के लिए प्रॉक्सिंग विधियों का मानचित्र रखता है। इस मानचित्र में कोई भी कॉल इसकी विधि के साथ संभालता है, अन्य ऑब्जेक्ट को कॉल करते हैं। proxy-super क्या यह स्वयं को फ़ंक्शन विधि मानचित्र बनाने, स्वयं को कॉल करने और बाद में वापस डालने के द्वारा स्वयं को हटाकर जादू करता है। कॉल को छोड़कर प्रॉक्सी ऑब्जेक्ट की उस विधि को कोई भी कॉल प्रॉक्सी ऑब्जेक्ट के माध्यम से गिर जाएगी।

  • उत्पादन की पहली पंक्ति प्रॉक्सी कॉल से आता है और आप ओवरराइड उत्पादन को देखने के
  • क्योंकि जब कि कॉल होता अधिभावी विधि वस्तुओं में प्रॉक्सी नहीं है दूसरी पंक्ति शून्य तर्क के साथ सुपर की विधि से आता है तरीके नक्शा।
  • तीसरी पंक्ति प्रॉक्सी हो जाती है क्योंकि वह विधि ऑब्जेक्ट प्रॉक्सिड विधियों के मानचित्र में है।

end of this post by Meikel Brandmeyer पर एक बहुत ही समान परिदृश्य का वर्णन किया गया है। मुझे संदेह है कि उत्तर प्रॉक्सी

के बजाय जेन-क्लास का उपयोग करना है