问题描述
是否可以检索方法/构造函数的调用者实例?
Is it possible to retrieve the caller instance of a method/constructor?
此问题已经发布,但每次答案都在讨论调用者类(使用stacktrace)而不是调用者实例。
如果存在一个解决方案,那么构建对象图(使用常见的超类型)并使用默认构造函数处理父子导航可能非常方便。
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.
这篇关于检索方法或构造函数的调用者实例(而不是类)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!