[英]How to instantiate a class just by having the class object and cast the result just by using the class from which it was instantiated?
[英]Find which class an object was instantiated in
我正在嘗試學習不必要的復雜源代碼。 有一個方法public void passObject(SomeObject someObject)
,我想知道someObject
實例化在哪個類中。問題是,當我們遍歷調用層次結構時,分支因子非常大。 例如,三個方法可以通過passObject
傳遞someObject
,而在這三個方法可以分別傳遞相同對象之前,三個方法可以傳遞。
是否有一些我可以插入passObject
方法,例如:
public void passObject(SomeObject someObject) {
whereDidThisComeFrom(someObject); // Should print the class (perhaps) where someObject was instantiated.
//
//do the other stuff that passObject is supposed to do.
}
我使用Eclipse
。
最簡單/最骯臟的方法是將(new Exception("test")).printStackTrace()
放入SomeObject
的構造函數中並運行代碼。 每次實例化SomeObject
您都會將堆棧跟蹤打印到控制台。
Eclipse還支持構造函數中的斷點,因此您可以設置斷點並進行調試。
的確,使用“顯示呼叫層次”可能會顯示太多結果,從而無法真正讓您了解執行流程。
相反,您可以嘗試在調試模式下使用Eclipse,並在passObject(SomeObject someObject)
的第一行上放置一個斷點。 然后,您將看到當前的堆棧跟蹤。 通過檢查堆棧跟蹤中的代碼,您可以確定實際發生的調用層次結構。
或者,如果無法調試,是否可以在passObject(SomeObject someObject)
添加另一行以打印當前堆棧跟蹤? 有關詳細信息,請參見此處 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.