是否可以通过堆栈框架访问方法参数?
由于我一直在努力的项目,我遇到了这种需求。如果出现异常,我想做一些日志记录。如果可能的话,我想以递归方式记录方法的名称和参数,直到我到达“上层”。
这是一个小例子:
class Parent{
public int parentMethod(int param1) {
String param2;
Child child = new Child();
(...)some Work(...)
int ret = child.childMethod(param1, param2);
(...)some More Work(...)
return ret;
}
}
class Child{
public int childMethod(int param1, String param2) {
(...) do more stuff (...)
try {
(...) this might generate an exception(...)
}catch(Exception e) {
(...) log method name and parameters value(...)
}
}
}
所以在这种情况下,我想记录下面的内容: -childMethod:param1值,param2值 - -parentMethod:param1 value -
答案 0 :(得分:2)
我认为你有一个根本问题。对于除基元之外的任何其他内容,将传递参数 references 。因此,方法可以更改传递给它的参数值。对堆栈的简单遍历不会解决此问题。
我注意到上面的示例使用了基元和不可变对象。但是我怀疑你需要更通用的解决方案。也许某种AOP解决方案可能会起作用,但你仍然需要在调用方法时复制对象(为了记录它们)而且我怀有一个悲伤的世界。