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

Java 检索方法或构造函数的调用方实例(不是类),java,inheritance,stack-trace,callstack,Java,Inheritance,Stack Trace,Callstack,是否可以检索方法/构造函数的调用方实例 这个问题已经发布了,但每次回答都是关于调用方类(使用stacktrace)而不是调用方实例。 如果存在一个解决方案,那么构建对象图(使用一个通用的超类型)并使用默认构造函数处理父子导航将非常方便 public class TestCallStack { public static class BaseClass { BaseClass owner; // //ok, this is the correct way to d

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

这个问题已经发布了,但每次回答都是关于调用方类(使用stacktrace)而不是调用方实例。 如果存在一个解决方案,那么构建对象图(使用一个通用的超类型)并使用默认构造函数处理父子导航将非常方便

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

你的直觉是正确的——这是不可能的。就我个人而言,我认为这是一件好事,因为它会使代码在重构方面变得非常脆弱(想象一下将一些代码拉到一个静态方法中——突然之间根本就没有调用方对象)

如果您想要表达某种所有者关系,那么应该显式地提供该所有者