使用Javassist添加的字段的NoSuchFieldException

问题描述

我正在尝试向课程中添加一个字段。我尝试了以下使用Javassist添加字段的方法。我正在尝试使用反射来获取该字段,但是会抛出java.lang.NoSuchFieldException

方法1

ClassPool classPool = ClassPool.getDefault();
CtClass clazz = classPool.get("com.mypack.MyClass");
CtField field = new CtField(CtClass.longType,"myNewField",clazz);
field.setModifiers(Modifier.PUBLIC);
clazz.addField(field,javassist.CtField.Initializer.constant(10L));

方法2

ClassPool classPool = ClassPool.getDefault();
CtClass clazz = classPool.get("com.mypack.MyClass");
CtField field = CtField.make("public long myNewField = 10;",clazz);
clazz.addField(field);

方法3

ClassPool classPool = ClassPool.getDefault();
CtClass clazz = classPool.get("com.mypack.MyClass");
ClassFile cf = clazz.getClassFile();
FieldInfo f = new FieldInfo(cf.getConstPool(),"I");
f.setAccessFlags(AccessFlag.PUBLIC);
cf.addField(f);

使用反射检索

Field myField = MyClass.class.getDeclaredField("myNewField");
System.out.println("----- "+ serField.get(null));

有人可以告诉我我做错了什么,或者我错过了什么吗?

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)