Получить экземпляр вызывающего (не класс) метода или конструктора - PullRequest
6 голосов
/ 05 июля 2011

Возможно ли получить экземпляр вызывающего метода / конструктора?

Этот вопрос уже был опубликован, но каждый раз в ответах говорится о классе вызывающего (с использованием 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
    }
}

1 Ответ

9 голосов
/ 05 июля 2011

Ваше внутреннее чувство правильно - это невозможно. Лично я думаю, что это хорошо , поскольку это сделало бы код довольно хрупким по отношению к рефакторингу (представьте, что какой-то код вытаскивается в статический метод - вдруг вообще не появляется объект вызывающего объекта).

Если вы хотите выразить какую-то связь с владельцем, вы должны явно указать этого владельца.

...