开发者

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

Is it possible to retriev开发者_StackOverflow社区e 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
    }
}


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜