Javassist - 将标志传递给编译器

标签 java reflection javac javassist

我有一个简单的问题。我正在使用 Javassist 向类添加方法,然后重建 jar 文件。

Javassist使用Javac来编译代码。但是在 Javassist 编译后,我无法使用例如 LocalVariableTable 访问 LocalVariableTable javap

我读到标志 - g 必须在编译期间在编译器中设置。

你知道如何强制Javassist使用自定义标志进行编译,例如-g吗?

谢谢。

最佳答案

我找到了答案。

JavacJavassist的内部编译器。 Javac 类具有名为 recordLocalVariables 的方法。

recordLocalVariables 在整个库中被调用 3 次(但它也是公共(public)方法):

  • CtBehavior.insertBefore
  • CtBehavior.insertAfter
  • CtBehavior.insertAt

为了确保局部变量将与字节码一起存储,只需在创建新方法期间使用这些方法之一。

关于Javassist - 将标志传递给编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37639049/

相关文章:

java - System.in 方法中指定的键盘在哪里?

java - 使用 Graphics2D 绘制时矩形的实际边界

java方法返回类型不是实际类型

c# - 如何反射(reflect) T 以构建查询的表达式树?

java - 如何通过 Google App Engine 使用 JavaMail 发送电子邮件

java - System.currentTimeMillis 如何在短时间内返回不同长度的多头?

java - java中使用反射动态创建对象

java - "javac: release version 10 not supported"编译期间

java - 从 Linux Cmd 运行 Java 项目

Java - Linux 上的命令行 : I don't have any output after I run the code