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