8

我是 Javassist 的新手,我已经阅读了一些与它相关的教程。

因为我需要在每个方法进入或方法退出之前进行一些字节码注入,并从中获取一些统计信息。

通过网上的javassit教程,我发现我们可以为一个已有的类做一个新的字段:

CtClass point = ClassPool.getDefault().get("Point");
CtField f = new CtField(CtClass.intType, "z", point);
point.addField(f);

但是 CtField 的类型默认只包含原始类型,我们可以添加一个非原始类型的新字段,例如 ArrayList 吗?

如果我可以将新的 ArrayList 字段添加到现有类中,由于该类不导入 java.util.ArrayList,是否会导致编译错误?

4

1 回答 1

10

是的,您可以添加非原始字段。您只需要获取该字段的类的句柄,通常是通过 ClassPool。请注意,您将需要要使用的类的完全限定名称:

CtClass arrListClazz = ClassPool.getDefault().get("java.util.ArrayList");
CtClass point = ClassPool.getDefault().get("Point");
CtField f = new CtField(arrListClazz, "someList", point);
point.addField(f);
于 2012-02-19T08:18:35.610 回答