这是我与ByteBuddy的第一次体验,我想动态创建一个java.lang.Object
的子类,只有一个名为 myValue 的公共字段{{1}和#34; Hello World!"的默认值。
不幸的是,在调用myClass.newInstance()之后,字段的值为java.lang.String
(在Eclipse调试器中)。
null
我在这里错过了什么吗?
我正在使用Eclipse Mars.2,Oracle JDK 1.7.0_75和ByteBuddy-1.2.3
答案 0 :(得分:3)
value
方法正在为字段编写常量池默认值,这对于static
字段只能在Java中使用。 Byte Buddy应在此方案中抛出异常,而不是静默抑制错误。我将为下一个版本更改此行为并更新 javadoc 以更清楚value
方法正在执行的操作。
如果要设置字段值,则需要拦截任何构造函数以设置字段值。您可以通过不同的方式执行此操作,例如将MethodDelegation
与@FieldProxy
注释结合使用。文档显示了如何完成此操作的示例。