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

发布于 2024-11-19 06:24:25 字数 317 浏览 5 评论 0原文

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

つ低調成傷 2024-11-26 06:24:25

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

当然,在上面的代码中,您可以将 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 into String ... 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.

何其悲哀 2024-11-26 06:24:25

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文