Bytebuddy:如何在循环中定义字段

Bytebuddy: how to defineField within a loop

我想在运行时从映射 Map <String, Class<?>> properties 添加字段,这样我就可以遍历 properties 的条目来定义动态 class[= 的字段13=]

new ByteBuddy()
  .defineField(entry.getKey(), entry.getValue()) 

只需遍历不可变构建器并在每一步中改变它:

DynamicType.Builder<?> builder = ...
for (Map.Entry<String, Class<?>> entry : properties.entrySet()) {
  builder = builder.defineField(entry.getKey(), entry.getClass();
}

请注意构建器是不可变的,您需要在循环体内重新分配它。

@Rafael Winterhalter 其实应该是:

DynamicType.Builder<?> builder = ...

for (Map.Entry<String, Class<?>> entry : properties.entrySet()) {
    builder = builder.defineField(entry.getKey(), entry.getValue();
}

但是你的回答给了我正确答案的指导,非常感谢。