2011-07-05 2 views
6

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

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

ответ

7

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

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

+0

I Jon, благодарю вас за это подтверждение. – fedevo

Смежные вопросы