如何为新定义的字段分配默认值?

时间:2016-03-01 13:46:25

标签: java byte-buddy

这是我与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

1 个答案:

答案 0 :(得分:3)

value方法正在为字段编写常量池默认值,这对于static字段只能在Java中使用。 Byte Buddy应在此方案中抛出异常,而不是静默抑制错误。我将为下一个版本更改此行为并更新 javadoc 以更清楚value方法正在执行的操作。

如果要设置字段值,则需要拦截任何构造函数以设置字段值。您可以通过不同的方式执行此操作,例如将MethodDelegation@FieldProxy注释结合使用。文档显示了如何完成此操作的示例。