如何将默认值分配给新定义的字段?
问题描述:
这是我第一次使用ByteBuddy,我想动态创建一个java.lang.Object
的子类,只有一个名为myValue的公共字段,其类型为java.lang.String
,默认值为“Hello World!”。 不幸的是,在调用myClass.newInstance()之后,该字段的值为null
(在Eclipse调试器中)。如何将默认值分配给新定义的字段?
final Class<?> myClass = new ByteBuddy().subclass(Object.class).name("test.MyClass")
.defineField("myValue", String.class, Visibility.PUBLIC)
.value("Hello World !")
.make()
.load(getClass().getClassLoader(), ClassLoadingStrategy.Default.INJECTION).getLoaded();
Object myObject = myClass.newInstance();
我在这里错过了什么吗?
我使用Eclipse Mars.2,一个Oracle JDK 1.7.0_75和ByteBuddy-1.2.3
答
的value
方法是场什么在Java中只能写一个常量池默认值为static
字段。 Byte Buddy应该在这种情况下抛出一个异常,而不是默默地压制错误。我将在下一个版本中更改此行为,并更新javadoc以更清楚地了解value
方法正在执行的操作。
如果你想设置一个字段值,你需要拦截任何构造函数来设置字段值。您可以通过不同的方式执行此操作,例如将MethodDelegation
与@FieldProxy
注释组合使用。该文档显示了如何完成这个过程的例子。
+0
我怀疑'value'方法的目的不是设置相应字段的值。我同意javadoc可以更加明确。感谢您的反馈,并保持良好的工作! –
我很困惑,为什么你想这样做? –
原因并非真正相关,因为我只是在探索图书馆(正如“Hello World!”值所示)。我想仿效的课程如下所示: 'package test; public class MyClass {0} {0} {0} public int myValue =“Hello World!”; }' –