是否有可能在Java 7执行时不使用显式字节码操作工具和其他框架获得方法参数值?
我需要它作为我的javassist日志框架。
public void foo(String arg1, String arg2){
//injected code
Object[] args;
args = ???;//get arg1 and arg2 values in current method context
Logger.logMethodArgs(args);
//end of injected code
...
}
基本上,在这种级别上没有任何变化,唯一的语言级别变化是在项目硬币。
当然,在上面的代码中,您可以将String arg1, String arg2
更改为String ... args
,但这不适用于具有不同类型的参数。另一种解决方法是让您的IDE(例如Eclipse)使用AST(抽象语法树)中的信息来生成日志语句。任何解析IDE都应该能够做到这一点。如果您使用的是文本编辑器,那么程序员可能需要做更多的工作,并自己迭代参数的数量。
http://paranamer.codehaus.org给出了参数名。这是另一个框架。我使用Maven的"shade"插件,将类拉入我正在构建的东西中,以便最终用户没有传递依赖关系。