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

标签 java inheritance stack-trace callstack

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

这个问题已经发布了,但每次的答案都在谈论调用者类(使用堆栈跟踪)而不是调用者实例。 如果存在解决方案,构建对象图(具有通用父类(super class)型)并使用默认构造函数处理父子导航会非常方便。

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

最佳答案

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

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

关于java - 检索方法或构造函数的调用者实例(不是类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6580677/

相关文章:

class - 当类位于不同的 "namespaces/packages"中时,Perl6类继承

c++ - 当派生类方法不可行时,为什么 C++ 重载决策不查看基类方法?

java - 在记录器中获取堆栈跟踪

node.js - 是否有任何 npm 模块使用 async_hooks 来检索异步堆栈跟踪?

java - 从 GAE/J 调用 SOAP 服务

java - java.io.IOException : "The filename, directory name, or volume label syntax is incorrect" 的可能原因是什么

java - PowerMockito thenReturn 返回错误的对象

postgresql - 我可以在 PostgreSQL 中有一个父表的外键吗?

java - 当堆栈跟踪仅显示 Eclipse 中的 native 方法时,如何找到导致错误的代码行

java - 读取托管非常大数据的 REST api 响应