检索方法或构造函数的调用者实例(而不是类)

时间:2011-07-05 09:42:55

标签: java inheritance stack-trace callstack

是否可以检索方法/构造函数的调用者实例?

此问题已经发布,但每次答案都是关于调用者类(使用堆栈跟踪)而不是调用者实例。 如果存在解决方案,那么构建对象图(使用公共超类型)并使用默认构造函数处理父子导航可能非常方便。

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

1 个答案:

答案 0 :(得分:9)

你的直觉是对的 - 这是不可能的。我个人认为这是一个的东西,因为它会使代码在重构方面相当脆弱(想象一下将一些代码拉入静态方法 - 突然间根本没有调用者对象)。

如果您想表达某种所有者关系,则应明确提供该所有者。