2009-09-27 152 views

回答

5

簡答:在Java中沒有辦法做到這一點。 (你可以找出什麼類叫你,但下面的長答案也適用於大多數情況。)

長答案:代碼的神奇行爲取決於它被調用的地方几乎總是一個壞主意。任何需要維護你的代碼的人都會感到困惑,這會嚴重影響你重構的能力。例如,假設您意識到實例化對象的兩個地方基本上具有相同的邏輯,所以您決定將常見位分解出來。驚喜!現在代碼的行爲有所不同,因爲它正在從其他地方實例化。只需添加參數並修復呼叫者。從長遠來看,這將節省您的時間。

1

攔截方法調用(包括構造函數)不改變大量現有的代碼是Aspect-oriented programming的一件事。

退房AspectJ開始。使用AspectJ,你可以定義一個「切入點」來指定你想攔截某個對象或一組對象的構造函數調用(如果需要,使用通配符),並且在攔截代碼(「advice」)中,您將獲得方法上下文,其中包含有關調用方法和對象的信息。

您甚至可以使用AspectJ向對象添加字段來存儲父引用而不修改其現有代碼(這稱爲「簡介」)。

+0

感謝您的輸入,但向代碼庫添加更多庫並不是我想要做的事情。我只希望用java來快速簡單地解決這個問題。 – Andreas

+0

...它變成了Java!對不起,無法抗拒。祝你好運! – JoshJordan

3

如果您想知道調用類,則將「this」作爲參數傳遞給構造函數。

Thing thing = new Thing(this); 

編輯:現代IDE允許重構將使這很容易做到。

+0

這也表明「事」是內部階層的候選人。 – erickson

相關問題