2011-07-05 5 views
6

메소드/생성자의 호출자 인스턴스를 검색 할 수 있습니까?메소드 또는 생성자의 호출자 인스턴스 (클래스가 아님) 검색

이 질문은 이미 게시되었지만 호출자 클래스 (스택 추적 사용) 및 호출자 인스턴스에 대한 답변이있을 때마다 게시됩니다. 솔루션이있는 경우 개체 그래프 (공통 수퍼 유형 포함)를 만들고 기본 생성자를 사용하여 부모 자식 탐색을 처리하는 것이 매우 편리 할 수 ​​있습니다.

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 존,이 확인을 위해 감사드립니다. – fedevo

관련 문제