Javassist 说明(导入和 InsertAt)

Javassist Clarification (Imports and InsertAt)

我只想澄清一些与 Javassist 相关的事情。

1. ClassPool.importPackage 方法是否在物理上向 class 添加行号?例如,如果这是我的代码:

public class Test {
    public static void main(String[] args){
        System.out.println("Message!");// Line 3
    }
}

我要导入 "java.util.*;" 包,打印语句现在会在第 4 行吗?

2. 有没有办法在方法行号而不是 class 行号处添加代码? CtMethod.insertAt() 需要 class 行号。

如果有人对此有所了解,我将不胜感激,因为文档非常模糊,而且似乎没有其他人发现有必要提出这个问题。

除非您告诉它,否则 Javassist 不会更改行号。如果您在 Javassist 中导入 class,这不会更改 class 文件,而只会提示 Javassist 应该在哪些包中查找不合格的 class 名称。在字节码中,class 名称始终是完全限定的。

此外,Javassist 不支持方法级别的 insertAt。但是,您可以通过遍历方法的指令并找到第一行号来模拟这一点。只需为此数字添加一个偏移量。