ByteBuddy 的字段设置检查是否过于严格?
Are ByteBuddy's field setting checks too strict?
我正在使用 MethodCall.setsField()
尝试在另一个实例上设置实例字段。
我生成的正在执行字段设置的 class GC
正在尝试在它创建的某个实例中设置实例字段的值 (CI
).所以该字段的声明类型是CI
;我的字段设置代码位于 GC
中(与 CI
在同一个包中,但与它无关)。
ByteBuddy checks seem to indicate that although GC
and CI
are in the same package, GC
must be assignable to CI
in order to set this field!这让我大吃一惊,但我不是字节码专家,我很可能会忽略一些明显的东西。有人可以解释一下为什么需要进行此检查吗?
方法调用在调用方法的 this 实例上隐式设置字段。为此,non-static 字段必须由调用该方法的类型的超类型声明。
如果您认为这过于严格,请提交一个问题,其中包含您尝试生成的代码示例,包括当前失败的生成代码的代码。可能是我考虑不周,如果有解禁的话,我一定会的。
我正在使用 MethodCall.setsField()
尝试在另一个实例上设置实例字段。
我生成的正在执行字段设置的 class GC
正在尝试在它创建的某个实例中设置实例字段的值 (CI
).所以该字段的声明类型是CI
;我的字段设置代码位于 GC
中(与 CI
在同一个包中,但与它无关)。
ByteBuddy checks seem to indicate that although GC
and CI
are in the same package, GC
must be assignable to CI
in order to set this field!这让我大吃一惊,但我不是字节码专家,我很可能会忽略一些明显的东西。有人可以解释一下为什么需要进行此检查吗?
方法调用在调用方法的 this 实例上隐式设置字段。为此,non-static 字段必须由调用该方法的类型的超类型声明。
如果您认为这过于严格,请提交一个问题,其中包含您尝试生成的代码示例,包括当前失败的生成代码的代码。可能是我考虑不周,如果有解禁的话,我一定会的。