在Java 7中动态访问方法参数

时间:2011-07-08 15:23:38

标签: reflection dynamic 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
  ...
}

2 个答案:

答案 0 :(得分:1)

基本上,在这种水平上没有任何改变,唯一的语言水平变化是项目硬币。

当然,在上面的代码中,您可以将String arg1, String arg2更改为String ... args,但这不适用于具有不同类型的参数。另一种方法是让您的IDE(例如Eclipse)使用AST(抽象语法树)中的信息来生成日志记录语句。任何解析IDE都应该能够做到这一点。如果您使用的是文本编辑器,那么程序员可能需要做更多的事情并自己迭代参数的数量。

答案 1 :(得分:1)

http://paranamer.codehaus.org为您提供参数名称。它的另一个框架。我使用' shade' Maven的插件,将类提取到我构建的东西中,以便最终用户没有传递依赖。