首页 > 解决方案 > 创建具有可变数量字段的类

问题描述

我想创建一组具有可变数量字段的类。我尝试了什么:

private Class<?> generateClass(String clazzName, Map<String, Class<?>> fields) {
    DynamicType.Builder<Object> buddy = new ByteBuddy()
            .subclass(Object.class)
            .name(clazzName);
    
    fields.forEach((k, v) -> {
        buddy.defineField(k, v, Visibility.PRIVATE);
    });
    return buddy.make().load(ClassLoader.getSystemClassLoader()).getLoaded();
}

其中参数clazzName是要创建的类名,字段的key代表字段名,value代表字段类型。

上面代码的问题是它创建了类但没有任何字段。我错过了什么?

也可以从上面的字段中生成公共吸气剂吗?

标签: javabyte-buddy

解决方案


Byte Buddy 的 API 是不可变的。您将需要分配字段定义:

buddy = buddy.defineField(k, v, Visibility.PRIVATE);

您基本上是立即放弃所做的更改。


推荐阅读