在 Java 7 中动态访问方法参数
在 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
...
}
Is it possible to get method argument values at execution time in Java 7 without using explicit bytecode manipulation tools and other frameworks?
I need it for my javassist logging framework.
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
...
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
基本上,在这种水平上没有任何改变,唯一的语言水平变化是项目硬币。
当然,在上面的代码中,您可以将
String arg1, String arg2
更改为String ... args
,但这不适用于不同类型的参数。另一种解决方法是让您的 IDE(例如 Eclipse)使用 AST(抽象语法树)中的信息来生成日志记录语句。任何解析 IDE 都应该能够做到这一点。如果您使用的是文本编辑器,那么程序员可能需要做更多的事情并自己迭代参数的数量。Basically, at that kind of level nothing has changed, the only language level changes are in project coin.
Of course, in the above code you can change
String arg1, String arg2
intoString ... args
, but that does not work with arguments with different types. Another way around this is to have your IDE (e.g. Eclipse) use the information within the AST (abstract syntax tree) to generate the logging statements. Any parsing IDE should be able to get this right. If you are using a text editor, then programmer can be required to do a bit more and iterate through the number of arguments himself.http://paranamer.codehaus.org 为您提供参数名称。但它是另一个框架。我使用 Maven 的“shade”插件,将类拉入我正在构建的东西中,这样最终用户就没有传递依赖关系。
http://paranamer.codehaus.org gives you the parameter names. Its another framework though. I use the 'shade' plugin for Maven, to pull the classes into the thing I'm building though so that there's no transitive dependencies for end-users.