2015-10-08 5 views
5

क्या कॉलिंग क्लास की इंस्टेंस ऑब्जेक्ट प्राप्त करना संभव है?कॉलर का उदाहरण प्राप्त करें (प्रतिबिंब के माध्यम से)

class A{ 
    void foo(){ 
     Object o = getCaller(); //?? expect instance of B 
     long val1 = ..   // get val1 of o via reflection 
     // do something where val1 is crucial 
    } 
} 

class B{ 
    double val1 = Math.random(); 

    public static void main(String[] args) { 
     new B().callFoo(); 
    } 

    void callFoo(){ 
     new A().foo(); 
    } 
} 

मुझे पता है कि मैं स्टैकट्रेस के माध्यम से वर्ग/विधि बुला पता कर सकते हैं, लेकिन मैं उदाहरण चर (उदाहरण में VAL1 की तरह) का उपयोग करने की conrete उदाहरण की जरूरत है।

मैं जानता हूँ कि यह गंदा है, लेकिन इतना है कि यह सब कुछ के पुनर्निर्माण के बिना आवश्यक फ़ील्ड पारित करने के लिए लगभग असंभव है वर्ग बी एक unchangable पुस्तकालय में है।

+1

क्या वहाँ कोई उदाहरण है अगर ? आपको इसकी आवश्यकता क्यों है? –

+4

नहीं, आप मूल रूप से ऐसा नहीं कर सकते हैं। –

उत्तर

2

आप कॉलर के उदाहरण तक नहीं पहुंच सकते हैं जब तक कि यह उदाहरण किसी भी तरह से पास नहीं हो जाता है, या संग्रह में संग्रहीत नहीं किया जाता है।

उदाहरण पास करने के लिए आप कर सकते हैं निम्नलिखित:

class A{ 
    void foo(Object caller){ 
     long val1 = ..   
     // do something where val1 is crucial 
    } 
} 

class B{ 
    double val1 = Math.random(); 

    public static void main(String[] args) { 
     new B().callFoo(); 
    } 

    void callFoo(){ 
     new A().foo(this); 
    } 
} 

"इस" keywork बुला कोड के कहने foo विधि के लिए क्लास ए में पारित करेंगे

संबंधित मुद्दे

 संबंधित मुद्दे