2014-02-05 110 views
1

我試圖得到一些運行時信息做一些調試。有沒有辦法訪問實際傳遞給方法的參數?如何獲得Java中的調用方法的參數值?

我知道調用的類和方法,而不是參數,並在運行自己的價值。任何想法如何解決這個問題?提前致謝。

我迄今爲止代碼:

//get the class I wanna know something about out of the call history 
StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace(); 
String callerMethod = stacktrace[2].getMethodName(); 

//load the class to get the information 
Class<?> c = Class.forName(stacktrace[2].getClassName()); 
Method[] methods = c.getMethods(); 
Class<?>[] parameters = methods[1].getParameterTypes(); 

//get the parameter data 
(parameters[y].isArray()? parameters[y].getComponentType() : parameters[y]).getName(); 

//TODO: how about the parameter value at runtime? 

的代碼必須是通用的所有課程我會實現。使用示例:

public class doClass() { 
    public void doSomething(Object o) { 
    //here comes my debug line 
    magicDebugger(level); 
    } 
} 

level是開關/觸發激活的一些信息控制檯/數據庫/文件/郵件輸出或者其他

我期待下面的輸出(也許有一些在的System.out.println magicDebugger類):

[debug] caller: com.company.package.doClass.doSomething(Object o); value of o at runtime = java.lang.String "test" 
+2

你可以用方面來處理它,或者你調試你的代碼編輯器一樣 – Tenacious

+0

它必須通過控制檯調試的ecllipse。我不能使用eclipse來做到這一點。 – Ben

回答

1

看看這個反射。這應該提供你正在尋找的東西。

+2

沒有找到任何東西,但名稱。我需要價值。 – Ben

+0

對不起,那麼你會想看看代理或AOP對於他人的建議。 – Thom