25. februar 2009 - 07:51Der er
8 kommentarer og 1 løsning
Få fat i den class, som kalder constructor
Hi,
jeg har et object af klassen "Test" som kalder en constructor i Test2. Nu vil jeg gerne finde ud af, hvilket object der har kaldet denne constructor - og arbejde videre med dette.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++ public class Test2 { public Test2() { Object callerObject = null; // xyz.getObject(); --> "Test" if ( callerObject instanceof Test ) { Test co = (Test)callerObject; co.printOK(); } } } +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++ public class Test {
public static void main( String[] args ) { Test test = new Test(); }
public Test() { this.test2 = new Test2(); }
private Test2 test2 = null;
public void printOK() { System.out.println( "OK" ); } } +++++++++++++++++++++++++++++++++++++++++++++++++++++++
Hvad skal der stå i stedet for: "xyz.getObject();" ?
Min tankegang er, at jeg har et root-object, som har en form for registry-object - og at jeg ikke hele tiden vil have denne registry inde i en constructor. På denne måde kan jeg gå tilbage til ...
Hm. Nu skal jeg naturligvis læse hele spørgsmåls teksten og ikke kun overskriften.
class Test2 { public Test2() { Exception ex = new Exception(); StackTraceElement[] ste = ex.getStackTrace(); if ( ste[1].getClassName().equals("Test") ) { System.out.println("haps"); } } }
finder klassen men ikke instansen.
Men hvad vil du have hvis constructor bliver kaldt fra en static metode ?
Men hvis du ved at det ikke er et problem, så kan vi gribe til de grove midler.
Du kan bruge AspectJ !
Test.java ---------
public class Test { private Test2 test2 = null; public Test() { test2 = new Test2(); } public void printOK() { System.out.println( "OK" ); } public static void main( String[] args ) { Test test = new Test(); } }
class Test2 { public Test2() { Exception ex = new Exception(); StackTraceElement[] ste = ex.getStackTrace(); if ( ste[1].getClassName().equals("Test") ) { System.out.println("haps"); } } public Test2(Test co) { co.printOK(); } }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.