2011-07-05 19 views
6

Czy można odzyskać wywołanie metody/konstruktora?Pobierz instancję wywołującą (nie klasę) metody lub konstruktora.

To pytanie zostało już opublikowane, ale za każdym razem, gdy odpowiedzi dotyczą klasy dzwoniącego (za pomocą stosu stacktrace), a nie instancji wywołującego. Jeśli istnieje rozwiązanie, może być naprawdę wygodne zbudowanie wykresu obiektu (z typem super popularnym) i obsługa nawigacji nadrzędnej podrzędnej za pomocą domyślnego konstruktora.

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

Odpowiedz

7

Twoje przeczucie jest słuszne - nie jest możliwe. Osobiście uważam, że jest to dobry element, ponieważ spowodowałoby to, że kod byłby dość kruchy w odniesieniu do refaktoryzacji (wyobraź sobie, że wyjęto kod w statyczną metodę - nagle nie ma w ogóle obiektu wywołującego).

Jeśli chcesz wyrazić relację z właścicielem, należy wyraźnie podać tego właściciela.

+0

Jon, dzięki za to potwierdzenie. – fedevo

Powiązane problemy