2011-06-28 41 views
2

假設有一個名爲Node的類和另一個名爲Table的類。一個節點對象可以創建一個Table對象。顯然,Table類的構造函數被調用。是否可以從Table構造函數中獲取對創建此Table實例的Node對象的引用?一種方法是如果在創建對象時強制Node對象將「this」作爲參數傳遞給Table構造函數。有沒有其他的方式沒有參數需要傳遞?獲取正在嘗試創建的對象的引用

+0

讓大家知道,如果你是如此能夠訪問一個對象,這將是一個糟糕的設計選擇。可讀性以及表現。這會造成不必要的開銷並且混淆你的代碼。 –

回答

1

獲取對Java語言中「調用」對象(調用方法,構造函數等的實例)的引用的唯一方法是將「this」對象引用傳遞給需要的「receiver」方法知道。沒有其他方式使用普通Java,AFAIK。

2

我相信你可以使用Thread.getCurrentThread.getStackTrace()來訪問調用堆棧並找出調用它的類名稱。例如

Thread.getCurrentThread().getStackTrace()[1].getClassName(); 

但是,如果你想訪問該對象的實例,那麼我認爲訪問它的唯一方法是將'this'傳遞給構造函數。

0

這是一個完整的例子

public class GivesNameOfCallingClass { 
//constructor 
    public GivesNameOfCallingClass() { 
     try { 
      throw new Exception("Error"); 
     } 
     catch (Exception e) { 
      System.out.println(e.getStackTrace()[1].getClassName()); 
     } 
    } 
} 

而且測試類

public class GetNameOfCallingClassTest { 
    public static void main(String[] args) { 
     new GivesNameOfCallingClass(); 
    } 
}