我们可以使用javassist将非原始字段添加到现有类吗?

时间:2012-02-19 07:27:13

标签: java javassist

我是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,是否会导致编译错误?

1 个答案:

答案 0 :(得分:8)

是的,您可以添加非原始字段。你只需要获得该字段的类的句柄,通常通过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);