是否可以检索方法/构造函数的调用者实例?
该问题已经发布,但是每次答案都在谈论调用方类(使用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 } }
您的直觉是正确的-这是不可能的。我个人认为这是一个 很好的 事情,因为它会导致代码相对于重构非常脆弱的(想象一下,拉一些代码伸到一个静态方法- 突然有一个在所有无来电显示的对象)。
如果要表达某种所有者关系,则应明确提供该所有者。