Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Retrieve the caller instance (not class) of a method or constructor

Is it possible to retrieve the caller instance of a method/constructor?

This question has already been posted, but each time the answers are talking about caller Class (using stacktrace) and not caller instance. If a solution exists, it can be really convenient to build object graph (with a common super type) and handle parent child navigation with default constructor.

public class TestCallStack {
    public static class BaseClass {
        BaseClass owner;
//      //ok, this is the correct way to do it
//      public BaseClass(BaseClass owner) {
//          this.owner = owner;
//      }
        public BaseClass() {
            //this.owner = ???????; 
        }
    }
    public static class Parent extends BaseClass {
        Child child = new Child();
    }
    public static class Child extends BaseClass {
    }

    public static void main(String[] args) {
        Parent parent = new Parent();
        System.out.println(parent.child.owner==parent); // must be true
    }
}
like image 528
fedevo Avatar asked Jul 05 '11 09:07

fedevo


1 Answers

Your gut feeling is right - it's not possible. Personally I think that's a good thing, as it would make code pretty fragile with respect to refactoring (imagine pulling some code out into a static method - suddenly there's no caller object at all).

If you want to express some sort of owner relationship, you should provide that owner explicitly.

like image 106
Jon Skeet Avatar answered Sep 30 '22 18:09

Jon Skeet