0
A
回答
5
簡答:在Java中沒有辦法做到這一點。 (你可以找出什麼類叫你,但下面的長答案也適用於大多數情況。)
長答案:代碼的神奇行爲取決於它被調用的地方几乎總是一個壞主意。任何需要維護你的代碼的人都會感到困惑,這會嚴重影響你重構的能力。例如,假設您意識到實例化對象的兩個地方基本上具有相同的邏輯,所以您決定將常見位分解出來。驚喜!現在代碼的行爲有所不同,因爲它正在從其他地方實例化。只需添加參數並修復呼叫者。從長遠來看,這將節省您的時間。
1
攔截方法調用(包括構造函數)不改變大量現有的代碼是Aspect-oriented programming的一件事。
退房AspectJ開始。使用AspectJ,你可以定義一個「切入點」來指定你想攔截某個對象或一組對象的構造函數調用(如果需要,使用通配符),並且在攔截代碼(「advice」)中,您將獲得方法上下文,其中包含有關調用方法和對象的信息。
您甚至可以使用AspectJ向對象添加字段來存儲父引用而不修改其現有代碼(這稱爲「簡介」)。
3
如果您想知道調用類,則將「this」作爲參數傳遞給構造函數。
Thing thing = new Thing(this);
編輯:現代IDE允許重構將使這很容易做到。
+0
這也表明「事」是內部階層的候選人。 – erickson
相關問題
- 1. CoffeeScript:在實例化構造函數中的對象時出錯
- 2. 如何在構造函數中實例化接口類型化對象?
- 3. 在另一個構造函數中實例化的對象的構造函數中調用函數
- 4. Java - 在其構造函數中實例化同一類的對象
- 5. Roboguice - 從具有參數的構造函數實例化對象
- 6. 如何在實例化對象時調用父構造函數?
- 7. C++。對象是用錯誤的構造函數實例化的?
- 8. 在Java中的構造函數中實例化不同的類
- 9. 從構造函數實例化的全範圍對象
- 10. 獲取實例化構造函數的調用對象?
- 11. 如何實例化其構造函數使用yield的對象?
- 12. 調用沒有對象實例化的類方法(帶構造函數)在php
- 13. 使用接受字符串參數的構造函數實例化類對象?
- 14. JavaScript構造函數實例化對象前綴約定
- 15. 在構造函數中傳遞對象的特定實例
- 16. 使用COM的參數化構造函數實例化類
- 17. 無法實例化[..]:找不到默認構造函數;
- 18. 我應該在構造函數中實例化其他類嗎?
- 19. 將對象實例化爲沒有默認構造函數的類成員
- 20. 在其他類構造函數中初始化類對象
- 21. 實例化繼承構造函數
- 22. 從它的構造函數中創建新的對象實例
- 23. 從類對象構造類的實例在Java中
- 24. 在構造函數中計數實例
- 25. 反序列化類型T的對象的構造函數未找到
- 26. 在基類構造函數中構造對象?
- 27. 在運行時使用內部構造函數實例化類
- 28. 不能實例中的對象構造
- 29. 在另一個類C++的構造函數中實例化一個類的對象?
- 30. 在需要複製構造函數時實例化GCC:模板構造函數
感謝您的輸入,但向代碼庫添加更多庫並不是我想要做的事情。我只希望用java來快速簡單地解決這個問題。 – Andreas
...它變成了Java!對不起,無法抗拒。祝你好運! – JoshJordan