我可以識別我的通話對象嗎?
我可以創建stacktrace對於類名的A
但我如何訪問A
的對象?如何識別調用對象?
class A{
void method(){
new B().method();
}
}
class B{
void method(){
// can i recognize Object A ????
}
}
我可以識別我的通話對象嗎?
我可以創建stacktrace對於類名的A
但我如何訪問A
的對象?如何識別調用對象?
class A{
void method(){
new B().method();
}
}
class B{
void method(){
// can i recognize Object A ????
}
}
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
的頂級元素是你在找什麼。
也通過this。
非常感謝Maroun –
爲什麼你鏈接到一些第三方網站,只是複製已經[在官方文檔](http://docs.oracle.com/javase/7/docs/api /java/lang/StackTraceElement.html)?特別是因爲你的答案已經鏈接到JavaDoc本身。 –
僅僅是因爲表格形式的小方法摘要。提供參考作爲源,所以它不是剽竊 –
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
的Javadoc:
陣列的最後一個元素代表堆棧, 這是該序列中的至少最近的方法調用的底部。
和你可以從每個StackTraceElement的
得到什麼http://docs.oracle.com/javase/7/docs/api/java/lang/StackTraceElement.html
getClassName()
getFileName()
getLineNumber()
getMethodName()
我尋找調用對象,而不僅僅是調用類。 –
如果你真的需要向做到這一點,那麼你應該將其納入代碼的文檔。
class A{
void method(){
new B().method(this);
}
}
class B{
void method(A a){
System.out.println("I recognize 'a' as " + A);
}
}
不要這樣做!生產這種緊密耦合並不是一個好主意。你爲什麼認爲你需要這個? –
我知道,我知道..但有時 - 你知道一種方法來找到A的對象嗎? –
有時候是什麼?我可以合理想到的只有2個部分需要這些信息:安全檢查(參見'SecurityManager',這已經完成了)以及可能的日誌記錄(請參閱您最喜歡的日誌框架,也已完成)。 –