2015-10-08 7 views
5

ist es irgendwie möglich, das Instanzobjekt der aufrufenden Klasse zu bekommen?Get Instanz des Aufrufers (über Reflexion)

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(); 
    } 
} 

Ich weiß, dass ich herausfinden kann, Klasse/Methode über Stacktrace Aufruf aber ich brauche die conrete Instanz Instanz-Variablen (wie val1 in Beispiel).

Ich weiß, es ist schmutzig, aber Klasse B ist in einer unveränderbar Bibliothek, so dass es fast unmöglich ist, das gewünschte Feld ohne allen Wiederaufbau zu übergeben.

+1

Was, wenn es keine Instanz übergeben ? Warum brauchst du es überhaupt? –

+4

Nein, das geht grundsätzlich nicht. –

Antwort

2

Sie können nicht die Instanz des Anrufers zugreifen, wenn die Instanz irgendwie an sie übergeben wird, oder in einer Sammlung gespeichert.

die Instanz übergeben Sie können Folgendes tun:

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); 
    } 
} 

Das „this“ keywork wird die Instanz des anrufenden Code an die foo Methode in der Klasse A